2011-08-02 150 views
0

我想用单选按钮编写一个GUI(实际上是一个PyMOL插件)。我需要单选按钮在一个函数中。我有两个问题(如果单选按钮在功能之外,我没有任何问题):tkinter单选按钮不起作用

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

我应该明确设置主设备,否则将使用PyMOL GUI作为主设备。

v = StringVar(master=master) 

PS:谢谢托马斯霍尔德的答案。

+0

谢谢!我知道这真的很老,但我遇到了同样的问题,我准备把我的电脑扔在窗外 - 这解决了问题!谢谢! –

0

它为我(我复制你的代码,并添加行from Tkinter import *if __name__ == "__main__": draw_gui()我假设你有太多)。所有的单选按钮都可以工作,并且在输出中我会得到1,2,3。

因此,如果您运行的是相同的代码,则说明环境存在问题。我在Ubuntu 10.04上安装了Tkinter 73770和Python 2.6.5,并从命令行运行脚本。

你可能试图从IDLE运行它吗?对于使用Tkinter的其他脚本,这通常不会很好,因为它是用Tkinter自己写的。如果是这样,请尝试从命令行运行。

+0

你是对的代码按照你说的方式工作。我没有'__name__ =='__main__“:draw_gui()'。我正在尝试编写一个PyMOl插件[链接](http://www.pymolwiki.org/index.php/Plugins_Tutorial)我将编辑我的问题以添加整个代码 – aloctavodia

+0

在新代码中,它看起来像其中至少有一部分意味着成为“类”定义的一部分。你能发布自己编译和运行的尽可能短的代码片段,但不能像你期望的那样工作吗? – RoundTower

+0

我编辑代码,现在是最短的代码。 函数'__init __(self)'是加载代码作为PyMOL插件所必需的。我按照这个[教程]中的说明(http://www.pymolwiki.org/index.php/Plugins_Tutorial)。如果我省略了这个函数,而是添加'if __name__ =='__main__“这一行:draw_gui()'我可以从终端运行代码,并且按预期工作。 – aloctavodia