0

我有一个使用 Tkinter 设置的简单界面。我有一个无关紧要的下拉框。我还有两个条目小部件框。我想要发生的是第二个初始化为禁用,但只要在第一个框中输入任何文本,我希望第二个变为活动状态。出于某种原因,在第一个框中输入文本时,我的第二个框没有激活。任何帮助都会很棒。谢谢!

from Tkinter import *
import tkMessageBox
import os

if __name__ == "__main__":

    root = Tk()
    root.title("ShotBot")
    root["padx"] = 40
    root["pady"] = 20
    root.geometry('500x200-400+200')
    root.resizable(FALSE,FALSE)

    textFrame = Frame(root)


    #Create and place Option List

    var=StringVar()
    choices = ['a','b','c']    
    var.set(choices[0])
    entryWidget = OptionMenu(root, var, *choices)
    entryWidget["width"] = 30
    entryWidget.pack(side="top")


    #Create and Place Text Field

    entryWidget2= Entry(textFrame)
    entryWidget2["width"] = 30
    entryWidget2.pack(side="top")



    #Create and Place Text Field

    entryWidget3 = Entry(textFrame)
    entryWidget3["width"] = 30
    entryWidget3.pack(side="top")


    textFrame.pack()

    button = Button(root, text="Submit")
    button.pack()

    if entryWidget2.get().strip()=="":
        entryWidget3["state"]=DISABLED
    else:
        entryWidget3["state"]=NORMAL



root.mainloop()
4

1 回答 1

0

最简单的做法是为第一个条目小部件的选项分配一个值,textvariable在变量上放置一个跟踪,然后根据变量的当前值启用或禁用另一个小部件。像这样的东西:

#Create and Place Text Field

def on_variable_trace(*args):
    if entryVariable2.get() == "":
        entryWidget3.configure(state="disable")
    else:
        entryWidget3.configure(state="normal")

entryVariable2 = StringVar()
entryWidget2= Entry(textFrame, textvariable=entryVariable2)
entryWidget2["width"] = 30
entryWidget2.pack(side="top")
entryVariable2.trace("w", on_variable_trace)
于 2012-07-14T04:20:23.270 回答