2011-06-07 181 views
5

一个简单的问题(对于像我这样的tkinter newby不是那么简单):我正在构建一个GUI,我想要两个单选按钮来驱动状态(启用或禁用)一个Entry小部件,用户将输入数据。当第一个单选按钮被按下时,我想要禁用条目;当按下第二个单选按钮时,我希望禁用条目。Python tkinter通过单选按钮进入控件状态切换

这里是我的代码:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 

#callbacks 
def enableEntry(): 
    entry.configure(state=ENABLED) 
    entry.update() 

def disableEntry(): 
    entry.configure(state=DISABLED) 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

我的想法是当按下每个单选按钮来调用适当的回调。但我不确定它实际上发生在我写的代码中,因为当我选择无线电时,Entry的状态不会被切换。

我在哪里错了?

回答

5

你的程序有一些问题,但总体结构是确定的。

  1. 您不打电话root.mainloop()。这对于事件循环来说是必要的,以便服务诸如按钮点击等事件。
  2. 您使用ENABLEDDISABLED,但不要在任何地方定义或导入这些事件。我个人更喜欢使用字符串值"normal""disabled"
  3. 你是不是打包你的主要部件frame

当我解决这三样东西你的代码工作正常。这里的工作代码:

from Tkinter import * 

root = Tk() 
frame = Frame(root) 
frame.pack() 

#callbacks 
def enableEntry(): 
    entry.configure(state="normal") 
    entry.update() 

def disableEntry(): 
    entry.configure(state="disabled") 
    entry.update() 

#GUI widgets 
entry = Entry(frame, width=80) 
entry.pack(side='right') 

var = StringVar() 
disableEntryRadioButton = Radiobutton(frame, text="Disable", variable=var, value="0", command=disableEntry) 
disableEntryRadioButton.pack(anchor=W) 
enableEntryRadioButton = Radiobutton(frame, text="Enable", variable=var, value="1", command=enableEntry) 
enableEntryRadioButton.pack(anchor=W) 

root.mainloop() 
+0

布莱恩,道歉:我忘了插入'root.mainloop()'到我的代码摘录(错别字) – csparpa 2011-06-07 11:58:38

+0

好了,现在该代码工作正常。谢谢! – csparpa 2011-06-07 11:59:09