使用 Tkinter 禁用具有指定输入的条目

Using Tkinter to disable entry with specified input

如果从下拉菜单中选择 'no',我想使用 Tkinter 禁用一项。

from tkinter import *

def disableEntry(entry):
    entry.config(state='disable')

def allowEntry(entry):
    entry.config(state='normal')


def main():
    print("test")

root = Tk() #create a TK root window
root.title("Lunch and Learn")  #Title of the window

L1 = Label(root, text = "Label 1").grid(row=0, column=0, padx=30, pady=(20,5))
L2 = Label(root, text = "Label 2").grid(row=1, column=0, pady=5)

var = StringVar()

E1 = Entry(root,bd =3)
E1.grid(row=0, column=1)
D1 = OptionMenu(root,var,"yes","no")
D1.grid(row=1,column=1)

if var.get() == 'no':
    disableEntry(E1)
elif var.get() == 'yes':
    allowEntry(E1)

B2 = Button(text = "Submit", command=main).grid(row=4, column=2)

root.mainloop()

以上代码是我尝试过的一个简单示例。我创建了两个名为 'disableEntry' 和 'allowEntry' 的函数,它们应该更改输入框的状态,但是当我更改下拉菜单的输入时它们似乎没有做任何事情。

我不知道我是不是以错误的方式处理这个问题,或者是否有标准化的方法来做到这一点。

如有任何帮助,我们将不胜感激。

您需要一种方法来检查更改后的选择状态。这可以通过向 OptionMenu 小部件添加回调命令来实现。

您正在检查正确的变量,但您检查的点甚至在屏幕 window 显示之前。

from tkinter import Label, StringVar, OptionMenu, Entry, Tk, Button

# change the state of the Entry widget
def change_state(state='normal'):
    E1.config(state=state)

def main():
    print("test")

# callback function triggered by selecting from OptionMenu widget
def callback(*args):
    if var.get() == 'no':
        change_state(state='disable')
    elif var.get() == 'yes':
        change_state(state='normal')

root = Tk() #create a TK root window
root.title("Lunch and Learn")  #Title of the window

L1 = Label(root, text="Label 1").grid(row=0, column=0, padx=30, pady=(20, 5))
L2 = Label(root, text="Label 2").grid(row=1, column=0, pady=5)

var = StringVar()

E1 = Entry(root, bd=3)
E1.grid(row=0, column=1)
D1 = OptionMenu(root, var, "yes", "no", command=callback)
D1.grid(row=1, column=1)

B2 = Button(text = "Submit", command=main).grid(row=4, column=2)

root.mainloop()