我使用python2.7并试图根据OptionMenu小部件的值更改tkinter输入框的状态。我找到了一个如何在网上做here的例子,它是针对python 3的,但我不认为这是问题所在(如果我错了,请纠正我)。下面是一些示例代码,
from Tkinter import *
class App:
def _disable_f2(self):
if self.filt.get() == 'bandpass':
self.filter_menu.configure(state='normal')
else:
self.filter_menu.configure(state='disabled')
def __init__(self, master):
self.f2var = Tkinter.StringVar()
self.f2var.set('5.0')
self.f2_entry = Tkinter.Entry(master, textvariable=self.f2var,
width=5)
self.f2_entry.pack()
self.filt = Tkinter.StringVar()
self.filt.set('bandpass')
self.filter_menu = Tkinter.OptionMenu(master, self.filt,
'bandpass', 'lowpass ',
'highpass',
command=self._disable_f2)
self.filter_menu.pack(ipadx=50)
root = Tk()
app = App(root)
root.mainloop()然而,即使我没有传递两个参数,我仍然会得到以下错误。有人知道原因是什么吗?
TypeError: _disable_f2() takes exactly 1 argument (2 given)发布于 2014-09-08 08:24:13
如果给_disable_f2两个论点,就让它得到它想要的。试试下面..。:)
from Tkinter import *
class App:
def _disable_f2(self, master):
if self.filt.get() == 'bandpass':
self.filter_menu.configure(state='normal')
else:
self.filter_menu.configure(state='disabled')
def __init__(self, master):
self.f2var = StringVar()
self.f2var.set('5.0')
self.f2_entry = Entry(master, textvariable=self.f2var,
width=5)
self.f2_entry.pack()
self.filt = StringVar()
self.filt.set('bandpass')
self.filter_menu = OptionMenu(master, self.filt,
'bandpass', 'lowpass ',
'highpass',
command=self._disable_f2)
self.filter_menu.pack(ipadx=50)
root = Tk()
app = App(root)
root.mainloop()发布于 2014-09-08 09:12:40
如果您只接受另一个参数并打印它,您就可以找到由OptionMenu传递的参数是什么
def _disable_f2(self, arg):
print arg您将看到它打印OptionMenu的新值。因为传递了这个参数,所以您需要函数来接受它,并且您实际上正在使用它(与self.filt.get()一起使用),所以它被传递是很好的。
您可以将_disable_f2函数重写为:
def _disable_f2(self, option):
if option == 'bandpass':
self.f2_entry.configure(state='normal')
else:
self.f2_entry.configure(state='disabled')在您的原始代码中,当选项不是'bandpass'时,您禁用了选项菜单,但我假设您希望禁用该条目,对吗?这就是这个代码的作用。
另外,如果使用from Tkinter import *,则不必使用Tkinter.StringVar(),但只需使用StringVar()即可。Entry(...)、OptionMenu(...)和Tk()也是如此。尽管我建议使用import Tkinter as tk,使用tk.StringVar()等。
https://stackoverflow.com/questions/25719865
复制相似问题