gpt4 book ai didi

python - 根据 OptionMenu 的值更改 tkinter 输入框的状态

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:09 26 4
gpt4 key购买 nike

我正在使用 python 2.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)

最佳答案

如果您再接受一个参数并打印它,您可以找出 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()等。

关于python - 根据 OptionMenu 的值更改 tkinter 输入框的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com