【问题标题】:tkinter radio buttons does not work inside functiontkinter 单选按钮在函数内部不起作用
【发布时间】:2011-10-18 16:12:27
【问题描述】:

我正在尝试编写一个带有单选按钮的 GUI(实际上是一个 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()

提前致谢

【问题讨论】:

    标签: python function radio-button tkinter


    【解决方案1】:

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

    v = StringVar(master=master)
    

    PS:感谢 Thomas Holder 的回答。

    【讨论】:

    • 谢谢!我知道这真的很老了,但我遇到了同样的问题,我正准备把我的电脑扔出窗外——这解决了这个问题!谢谢!
    【解决方案2】:

    它对我有用(我复制了你的代码并添加了 from Tkinter import *if __name__ == "__main__": draw_gui() 行,我假设你也有)。所有单选按钮都有效,我在输出中得到适当的 1、2、3。

    所以如果你运行的是同样的代码,那就是环境有问题。我在 Ubuntu 10.04 上有 Tkinter 73770 和 Python 2.6.5,并且正在从命令行运行脚本。

    您是否正在尝试从 IDLE 运行它?这通常不适用于使用 Tkinter 的其他脚本,因为它是用 Tkinter 本身编写的。如果是这样,请尝试从命令行运行。

    【讨论】:

    • 你是对的,代码按照你说的方式工作。我没有__name__ == "__main__": draw_gui()。我正在尝试编写一个 PyMOl 插件 link 我将编辑我的问题以添加整个代码
    • 在新代码中,看起来至少有一部分是class 定义的一部分。您能否发布一段最短的代码,它可以自行编译和运行,但不能按您的预期工作?
    • 我编辑了代码,现在是最短的代码。函数__init__(self) 是作为 PyMOL 插件加载代码所必需的。我按照tutorial 中的说明进行操作。如果我省略了这个函数,而是添加了if __name__ == "__main__": draw_gui() 行,我就可以从终端运行代码并且它可以按预期工作。
    猜你喜欢
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2015-09-23
    • 2014-11-27
    • 2018-01-17
    相关资源
    最近更新 更多