1- вы никогда не звоните своему GUI
2- переменные, определенные внутри функции, имеют локальную область видимости, к ним нельзя получить доступ извне, кроме случаев, когда вы объявляете их в глобальной области видимости и используете global
для изменения их значений.
Следующее делает то, что вы ожидаете:
если не выбрана ни одна радиокнопка, click
печатает 0
когда выбран переключатель «КРАСНЫЙ», click
печатает 1
при нажатии кнопки «ЖЕЛТЫЙ» click
печатает 2
Вы можете использовать эти значения для перенаправления вызова в другую функцию.
import tkinter as tk
def do_nothing():
pass
def do_red():
print('doing the red thing')
def do_yellow():
print('doing the yellow thing')
def clicked():
print(f'clicked {selected.get()}')
v = selected.get()
if v == 0:
do_nothing()
elif v == 1:
do_red()
elif v == 2:
do_yellow()
else:
print('an error occurred, the wrong value was recieved')
def GUI():
global rad1, rad2, selected
window = tk.Tk()
window.title("Select First Color")
selected = tk.IntVar()
rad1 = tk.Radiobutton(window, text='RED', value=1, variable=selected)
rad2 = tk.Radiobutton(window, text='YELLOW', value=2, variable=selected)
button1 = tk.Button(window, text="Select", command=clicked)
button2 = tk.Button(window, text="Quit", command=window.destroy)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
button1.grid(column=6, row=0)
button2.grid(column=6, row=1)
window.mainloop()
rad1, rad2, selected = None, None, None
GUI()
Кроме того, вы можете использовать классы, чтобы избежать глобальных переменных:
import tkinter as tk
def do_nothing():
pass
def do_red():
print('doing the red thing')
def do_yellow():
print('doing the yellow thing')
class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.title("Select First Color")
self.selected = tk.IntVar()
self.selected.set(0)
self.rad1 = tk.Radiobutton(self, text='RED', value=1, variable=self.selected)
self.rad2 = tk.Radiobutton(self, text='YELLOW', value=2, variable=self.selected)
self.button1 = tk.Button(self, text="Select", command=self.clicked)
self.button2 = tk.Button(self, text="Quit", command=self.destroy)
self.rad1.grid(column=0, row=0)
self.rad2.grid(column=1, row=0)
self.button1.grid(column=6, row=0)
self.button2.grid(column=6, row=1)
self.mainloop()
def clicked(self):
print(f'clicked {self.selected.get()}')
v = self.selected.get()
if v == 0:
do_nothing()
elif v == 1:
do_red()
elif v == 2:
do_yellow()
else:
print('an error occurred, the wrong value was received')
GUI()