Определение того, какая радиопереключатель была выбрана ткинтером - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь понять, как правильно использовать радиокнопки tkinter.

Я использовал этот вопрос в качестве ориентира: Значения радиокнопок в Python Tkinter

Почему-то я не могу понять, как вернуть переменную, которая указывает на то, что выбрал пользователь.

Код:

 def quit_loop():
    global selection
    selection = option.get()
    root.quit()
    return selection



def createWindow():
    root = Tk()
    root.geometry=('400x400')
    option = StringVar()
    option.set('none')
    R1 = Radiobutton(root, text='Compile', value = 'Compile', var=option)
    R2 = Radiobutton(root, text='Create', value = 'Create', var=option)
    button = Button(root, text='ok', command=quit_loop)
    R1.pack()
    R2.pack()
    button.pack()
    root.mainloop()

, когда я звоню createWindow() Я ожидаюокно переключателя всплыло, и после выбора и нажатия кнопки «ОК» я ожидал, что он вернет мне переменную selection, которая относится к выбранной кнопке. Любой совет? Материал Tkinter особенно сложен для меня, потому что он кажется таким темпераментным.

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Вам нужно сделать option глобальным, если вы хотите получить доступ за пределами createWindow

Вот пример вашего кода, который распечатает значение выбранной радиокнопки и затем завершит работу, когда вы нажметекнопка. Я просто должен был объявить root и options глобальными:

from tkinter import *

def quit_loop():
    global selection
    selection = option.get()
    root.quit()
    return selection

def createWindow():
    global option, root
    root = Tk()
    root.geometry=('400x400')
    option = StringVar()
    option.set('none')
    R1 = Radiobutton(root, text='Compile', value = 'Compile', var=option)
    R2 = Radiobutton(root, text='Create', value = 'Create', var=option)
    button = Button(root, text='ok', command=quit_loop)
    R1.pack()
    R2.pack()
    button.pack()
    root.mainloop()

createWindow()
0 голосов
/ 22 октября 2019

Насколько я знаю, для связи с виджетами tkinter необходимо сделать две вещи: передать переменную и передать команду. Когда пользователь взаимодействует с виджетами, tkinter сделает две вещи: обновит значение переменной и вызовет функцию, переданную как command. От нас зависит доступ к значению переменной внутри командной функции.

import tkinter as tk
from tkinter import StringVar, Radiobutton

def handle_radio():
    print(option.get())

root = tk.Tk()

option = StringVar()
option.set('none')
R1 = Radiobutton(root, text='Compile', value = 'Compile', var=option, command=handle_radio)
R2 = Radiobutton(root, text='Create', value = 'Create', var=option, comman=handle_radio)

R1.pack()
R2.pack()

root.mainloop()

Код печатает «Создать» и «Компилировать», когда пользователь выбирает соответствующую опцию радио.

Надеюсь, это поможет.

С уважением,

Прасант

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