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

csp*_*rpa 5 python user-interface tkinter radio-button

一个简单的问题(对于像我这样的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)
Run Code Online (Sandbox Code Playgroud)

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

我哪里错了?

Bry*_*ley 6

你的程序有一些问题,但总体结构还可以.

  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()
Run Code Online (Sandbox Code Playgroud)