根据选项菜单的值更改tkinter输入框的状态

2024-09-29 21:57:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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}$

Tags: selfmasterapptkinterconfiguredefrootfilter
2条回答

如果给了_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()

如果您只需再接受一个参数并将其打印出来,就可以找出OptionMenu传递的参数是什么:

def _disable_f2(self, arg):
    print arg

您将看到它打印了OptionMenu的新值。因为传递了这个参数,所以需要函数来接受它,而且实际上是在使用它(使用self.filt.get()),所以它可以被传递。在

您可以将_disable_f2函数重写为:

^{pr2}$

在原始代码中,当选项不是'bandpass'时,您禁用了optionmenu,但我想您想禁用该条目,对吗?这就是代码的作用。在

另外,如果使用from Tkinter import *,则不必使用Tkinter.StringVar(),但可以使用StringVar()Entry(...)OptionMenu(...)Tk()也是如此。 尽管我建议使用import Tkinter as tk,并使用tk.StringVar()

相关问题 更多 >

    热门问题