Как сделать кнопку, выводящую текст в зависимости от положения чекбокса
возникла проблемка - никак не могу понять как заставить кнопку выводить разный текст в зависимости от чекбоксов. Вот минимально рабочий код от программы, нужно, чтобы при нажатии на кнопку без выбранных чекбоксов выводились, например, - V V, если выбран верхний чекбокс - V A, нижний - A V, оба - A A. Выдаёт он всё время только A A.
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('180x125')
opts = {'ipadx': 5, 'ipady': 5 , 'sticky': 'nswe'}
group_3 = tk.LabelFrame(self, padx=10, pady=10)
group_3.grid(row=0, column=1, **opts)
chk1_state=tk.BooleanVar()
chk1_state.set(False)
chk1=tk.Checkbutton(group_3, variable=chk1_state)
chk1.grid(row=4, column=1, sticky=tk.W)
group_4 = tk.LabelFrame(self, padx=10, pady=10)
group_4.grid(row=1, column=1, **opts)
chk2_state=tk.BooleanVar()
chk2_state.set(False)
chk2=tk.Checkbutton(group_4, variable=chk2_state)
chk2.grid(row=4, column=1, sticky=tk.W)
def emu():
if (chk1_state.get()==True, chk2_state.get()==True):
print("A A")
elif (chk1_state.get()==True, chk2_state.get()==False):
print("V A")
elif (chk1_state.get()==False, chk2_state.get()==True):
print("A V")
else:
print("V V")
group_7 = tk.LabelFrame(self, padx=10, pady=10)
group_7.grid(row=0, column=3, rowspan=2, **opts)
btn=tk.Button(group_7, text="Start", width=6, command=emu)
btn.grid(row=5, column=0, sticky=tk.W)
if __name__ == "__main__":
app = App()
app.mainloop()
Пробовал ttk чекбоксы с их .state и .instate, но видимо совсем не понимаю как их использовать, результат был тот же. Питон, честно, понимаю пока весьма плохо, почти всю программу собирал с помощью гайдов и англоязычной ветви сего форума (и то не задавая вопросы, а находя кого-то с похожей проблемой)
Ответы (1 шт):
У вас проблема была в условиях. Рекомендую побольше изучить основы Python.
def emu():
if chk1_state.get() and chk2_state.get():
print("A A")
elif chk1_state.get() and chk2_state.get() == False:
print("V A")
elif chk1_state.get() == False and chk2_state.get():
print("A V")
else:
print("V V")