tkinter单选按钮在函数内部无法工作
我正在尝试写一个图形用户界面(实际上是一个PyMOL插件),里面有单选按钮。我需要把这些单选按钮放在一个函数里面。但是我遇到了两个问题(如果单选按钮放在函数外面,我就没有问题):
1) 最后两个单选按钮看起来是灰色的,并且是选中的状态。(我觉得正确的情况应该是只有一个被选中,其他的都不应该是灰色的)即使我设置了不同的默认值(用ref_value.set()),也没有改变任何东西。
2) 每次点击提交按钮时,我总是得到默认值(在这个例子中是“1”)。
from Tkinter import *
def __init__(self):
"""this adds the Plugin to the PyMOL menu"""
self.menuBar.addmenuitem('Plugin', 'command',
'Plugin name',
label = 'plugin',
command = lambda : draw_gui())
def draw_gui():
global v
master = Tk()
master.title(' title ')
Button(master, text='Submit', command=submit).pack(side=BOTTOM)
v = StringVar()
v.set(1)
Radiobutton(master, text='option 1', variable=v, value=1).pack(side=LEFT)
Radiobutton(master, text='option 2', variable=v, value=2).pack(side=LEFT)
Radiobutton(master, text='option 3', variable=v, value=3).pack(side=LEFT)
master.mainloop()
def submit():
print v.get()
提前谢谢你们!
2 个回答
0
对我来说是可以的(我复制了你的代码,并添加了from Tkinter import *
和if __name__ == "__main__": draw_gui()
这两行,我猜你也加了)。所有的单选按钮都能正常工作,输出结果也能得到1、2、3,都是正确的。
所以如果你运行的是相同的代码,那就说明环境有问题。我在Ubuntu 10.04上使用的是Tkinter 73770和Python 2.6.5,并且是从命令行运行这个脚本的。
你是不是在IDLE里运行的?因为IDLE是用Tkinter写的,通常和其他使用Tkinter的脚本不太兼容。如果是这样,建议你试着从命令行运行。
2
我应该明确设置主控,否则它会把PyMOL的图形界面当作主控。
v = StringVar(master=master)
附注:感谢Thomas Holder的回答。