python tkinter - как установить начальный выбор для меню радиокнопок? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь реализовать меню с tkinter, которое включает в себя радиокнопки, но я не могу выбрать один из вариантов, прежде чем нажать на один из них. Когда появляется GUI, ни одна из радиокнопок не выбрана, вместо этого я хотел бы выбрать второй вариант. Это мой код:

menubar = Menu(root)
# create a pulldown menu, and add it to the menu bar
settings = Menu(menubar, tearoff=0)
settings.add_command(label='some 1', command=some_1)
settings.add_command(label='some 2', command=some_2)
mDebug = Menu(settings, tearoff=0)
rvar = IntVar(root)   
rvar.set(1) 
mDebug.add_radiobutton(label='first', var = rvar, value = 0)
mDebug.add_radiobutton(label='second', var = rvar, value = 1) 
mDebug.add_radiobutton(label='third', var = rvar, value = 2)

settings.add_cascade(label='radio options', menu = mDebug)
settings.add_separator()
settings.add_command(label='quit', command=close)
menubar.add_cascade(label="Menu", menu=settings)
root.config(menu=menubar)

РЕДАКТИРОВАТЬ: это более полная версия кода:

from tkinter import *


def change(idx):
    print(idx)

def show_menu(root):
    menubar = Menu(root)
    settings = Menu(menubar, tearoff=0)
    settings.add_command(label='some 1')
    settings.add_command(label='some 2')
    mDebug = Menu(settings, tearoff=0)
    rvar = IntVar(root)   
    rvar.set(1) 
    mDebug.add_radiobutton(label='first', var = rvar, value = 0, command=lambda idx=0: change(idx))
    mDebug.add_radiobutton(label='second', var = rvar, value = 1, command=lambda idx=1: change(idx)) 
    mDebug.add_radiobutton(label='third', var = rvar, value = 2, command=lambda idx=2: change(idx))

    settings.add_cascade(label='radio options', menu = mDebug)
    settings.add_separator()
    settings.add_command(label='quit')
    menubar.add_cascade(label="Menu", menu=settings)
    root.config(menu=menubar)

root = Tk() 

show_menu(root)

root.mainloop()

1 Ответ

0 голосов
/ 03 мая 2020

Проблема в том, что rvar является локальной переменной. Когда функция выходит из области видимости, процесс сбора мусора python уничтожит объект.

Вам необходимо сохранить ссылку на переменную. Например, self.rvar.

...