Python 3.x 使用Tkinter禁用具有指定输入的条目

Python 3.x 使用Tkinter禁用具有指定输入的条目,python-3.x,tkinter,tkinter-entry,disable,Python 3.x,Tkinter,Tkinter Entry,Disable,如果从下拉菜单中选择“否”,我希望使用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.t

如果从下拉菜单中选择“否”,我希望使用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”的函数,它们应该会更改输入框的状态,但当我更改下拉菜单的输入时,它们似乎没有任何作用

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()
我不知道我是否以错误的方式处理这个问题,或者是否有一个标准化的方法来处理这个问题


任何帮助都将不胜感激

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

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

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()