• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Python tkinter通过单选按钮进入控件状态切换

python 来源:csparpa 4次浏览

一个简单的问题(对于像我这样的tkinter newby不是那么简单):我正在构建一个GUI,我想要两个单选按钮来驱动状态(启用或禁用)一个Entry小部件,用户将输入数据。当第一个单选按钮被按下时,我想要禁用条目;当按下第二个单选按钮时,我希望禁用条目。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) 

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

我在哪里错了?

===========解决方案如下:

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

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

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)