tkinter单选按钮在函数内部无法工作

0 投票
2 回答
3160 浏览
提问于 2025-04-16 22:46

我正在尝试写一个图形用户界面(实际上是一个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的回答。

撰写回答