通过单选按钮切换Python tkinter输入框部件的状态

6
一个简单的问题(对于像我这样的tkinter新手来说并不简单):我正在构建一个GUI,我想要有两个单选按钮来控制一个输入框(Entry widget)的状态(启用或禁用),用户将在其中输入数据。当按下第一个单选按钮时,我希望输入框被禁用;当按下第二个单选按钮时,我希望输入框被启用。
以下是我的代码:
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
你的程序有几个问题,但总体结构是正确的。
  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()

Bryan,抱歉:我忘记在我的代码片段中插入root.mainloop()(笔误)。 - csparpa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接