Python tkinter Entry小部件状态通过单选按钮切换

时间:2011-06-07 09:28:41

标签: python user-interface radio-button tkinter

一个简单的问题(对于像我这样的tkinter newby来说并不那么简单):我正在构建一个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 个答案:

答案 0 :(得分:6)

你的程序有些问题,但一般结构还可以。

  1. 你没有打电话给root.mainloop()。这是事件循环服务事件(如按钮单击等)
  2. 所必需的
  3. 您使用ENABLEDDISABLED但未在任何地方定义或导入。我个人更喜欢使用字符串值"normal""disabled"
  4. 您没有打包主frame小部件
  5. 当我解决这三件事时,你的代码运行正常。这是工作代码:

    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()