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

2024-05-04 20:00:11 发布

您现在位置:Python中文网/ 问答频道 /正文

一个简单的问题(对于像我这样的tkinter新手来说不是那么简单):我正在构建一个图形用户界面,我希望有两个单选按钮来驱动输入小部件的状态(启用或禁用),用户将在其中输入数据。当按下第一个单选按钮时,我希望条目被禁用;当按下第二个单选按钮时,我希望条目被禁用。

这是我的代码:

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)

我的想法是在按下每个单选按钮时调用正确的回调。但我不确定它是否真的发生在我编写的代码中,因为当我选择收音机时,条目的状态不会被切换。

我错在哪里?


Tags: 代码varconfigure状态defupdate条目root
1条回答
网友
1楼 · 发布于 2024-05-04 20:00:11

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

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

相关问题 更多 >