Python tkinter Entry 小部件状态通过单选按钮切换
Posted
技术标签:
【中文标题】Python tkinter Entry 小部件状态通过单选按钮切换【英文标题】:Python tkinter Entry widget status switch via Radio buttons 【发布时间】:2011-09-09 22:21:00 【问题描述】:一个简单的问题(对于像我这样的 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】:您的程序有一些问题,但总体结构还可以。
-
你没有打电话给
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()
【讨论】:
Bryan,抱歉:我忘记在我的代码摘录中插入root.mainloop()
(错字)以上是关于Python tkinter Entry 小部件状态通过单选按钮切换的主要内容,如果未能解决你的问题,请参考以下文章
在 Tkinter 中按下按钮后如何清除 Entry 小部件?