2012-07-14 80 views
0

我有一个使用Tkinter设置的简单界面。我有一个下拉框,这是无关紧要的。我也有两个入口控件框。我想要发生的是第二个初始化为DISABLED,但是很快因为任何文本都输入到第一个框中,我希望第二个框变为活动状态。出于某种原因,当第一个文本框输入文本时,我的第二个框不会启动。任何帮助都会很棒。谢谢!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() 

回答

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) 
+0

我很好奇你的答案。我完全不熟悉这种'trace()'方法。你能把我连接到一个API? – acattle 2012-07-14 04:41:51

+1

@acattle:变量的跟踪方法可以让您在访问Tkinter变量(读取,写入或删除)时设置回调。在这里阅读变量轨迹:http://effbot.org/tkinterbook/variable.htm。 Tkinter有一些GUI工具包有些独特的功能;这是其中之一。这是一个非常强大的构造。 – 2012-07-14 13:00:46

+0

@BryanOakley工作很好。我不知道文本变量选项。非常感谢! – mattgarkusha 2012-07-15 00:54:01