Радио кнопки tkinter не работают внутри функции - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь написать 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()

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Я должен установить мастер явно, иначе он будет использовать PyMOL GUI в качестве мастера.

v = StringVar(master=master)

PS: спасибо Томасу Холдеру за ответ.

0 голосов
/ 03 августа 2011

Это работает для меня (я скопировал ваш код и добавил строки from Tkinter import * и if __name__ == "__main__": draw_gui(), которые, как я полагаю, у вас тоже есть).Все переключатели работают, и я получаю 1, 2, 3 в зависимости от ситуации.

Так что, если вы используете один и тот же код, возникает проблема со средой.У меня Tkinter 73770 и Python 2.6.5 в Ubuntu 10.04, и я запускаю скрипт из командной строки.

Возможно, вы пытаетесь запустить его из IDLE?Это часто плохо сочетается с другими сценариями, использующими Tkinter, потому что он написан на самом Tkinter.Если это так, попробуйте запустить из командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...