通过单选按钮切换Python tkinter Entry小部件状态
这是一个简单的问题(对像我这样的tkinter新手来说可不简单):我正在制作一个图形界面(GUI),想要有两个单选按钮来控制一个输入框(Entry)的状态(启用或禁用),用户可以在这个输入框里输入数据。当第一个单选按钮被按下时,我希望输入框被禁用;当第二个单选按钮被按下时,我希望输入框也被禁用。
这是我的代码:
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)
我的想法是,当每个单选按钮被按下时,调用相应的回调函数。但我不太确定我写的代码是否真的能做到这一点,因为当我选择单选按钮时,输入框的状态并没有改变。
我哪里出错了呢?
1 个回答
7
你的程序有几个地方需要改进,但整体结构还不错。
- 你没有调用
root.mainloop()
。这个调用是必须的,它可以让程序处理一些事件,比如按钮点击等。 - 你使用了
ENABLED
和DISABLED
,但没有在任何地方定义或导入它们。个人来说,我更喜欢用字符串值"normal"
和"disabled"
。 - 你没有把主
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()