我正在使用Python2.7并尝试根据OptionMenu小部件的值更改tkinter输入框的状态。我找到了一个在线操作的例子here,它是针对python3的,但我不认为这是问题所在(如果我错了,请纠正我)。下面是一些示例代码
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()
但是,即使我没有传递两个参数,我仍然会得到以下错误。有人知道原因吗?在
^{pr2}$
如果给了_disable_f2两个参数,让它拥有它想要的。。试试下面。。。 :)
如果您只需再接受一个参数并将其打印出来,就可以找出
OptionMenu
传递的参数是什么:您将看到它打印了
OptionMenu
的新值。因为传递了这个参数,所以需要函数来接受它,而且实际上是在使用它(使用self.filt.get()
),所以它可以被传递。在您可以将
^{pr2}$_disable_f2
函数重写为:在原始代码中,当选项不是
'bandpass'
时,您禁用了optionmenu,但我想您想禁用该条目,对吗?这就是代码的作用。在另外,如果使用
from Tkinter import *
,则不必使用Tkinter.StringVar()
,但可以使用StringVar()
。Entry(...)
、OptionMenu(...)
和Tk()
也是如此。 尽管我建议使用import Tkinter as tk
,并使用tk.StringVar()
等相关问题 更多 >
编程相关推荐