Так как вы работаете с булевыми значениями, я подумал, что имеет смысл использовать вместо BooleanVar
.
Вы можете просто передать кнопки функции check
и изменить их цвета, если вызнать, какая из них правильная:
def check(btn1, btn2):
btn1.config(bg='green')
btn2.config(bg='red')
Затем измените радиокнопки как таковые (чуть ниже того места, где вы их определили):
for btn in (R1, R2):
btn.config(command=lambda btn1=R1,btn2=R2:check(btn1,btn2))
Обратите внимание, я использовал две кнопки как R2
и R3
имели одинаковые значения, поэтому они будут эффективно объединены в единое целое.
Вот пример;он использует список кнопок для хранения всех созданных радиокнопок и меняет цвет каждой из них в зависимости от их текста, а также проверяет, получил ли игрок правильный ответ.
import tkinter as tk
def check_answer():
if question_answer.get() == 2: #get the value of the integer variable
print('you got it right') #if it has been set to 2 by the player, they got it right
for btn in btnlist: #check each of our radiobuttons
if int(btn['text']) == 2: #if the text of that button is equal to the correct answer
btn.config(bg='green') #make it green
else:
btn.config(bg='red') #otherwise make it red
win = tk.Tk()
question = 'What is 1+1?' #put your question here
question_answer = tk.IntVar() #we use an Integer Variable to store the value of the answer
question_answer.set(0) #we set the value of the correct answer to 0
lbl = tk.Label(win, text=question)
lbl.grid(columnspan=4)
column = 0
btnlist = []
for answer in range(4): #create radiobuttons in a for loop
btn = tk.Radiobutton(win, text=str(answer), variable=question_answer,
value=answer) #associate each button with the answer variable
#but give each button its own unique value
btnlist.append(btn)
btn.grid(row=1, column=column)
column += 1
confirm_btn = tk.Button(win, text='Confirm', command=check_answer)
confirm_btn.grid(columnspan=4)
win.mainloop()
В этом примере я использовалIntVar
поскольку ответом является целое число, вы также можете использовать BooleanVar
или StringVar
таким же образом, как это необходимо.
РЕДАКТИРОВАТЬ: Согласно вашему запросу в комментариях:
import tkinter as tk
win = tk.Tk()
text_to_add_to_btns = ['A', 'B', 'C', 'D', 'E'] #change to whatever text you like
#with however many elements which represent each individual button
btn_list = []
Column = 0
for txt in text_to_add_to_btns:
btn = tk.Button(win, text=txt)
btn.grid(row=0, column=Column, sticky='nesw')
btn_list.append(btn)
Column += 1
win.mainloop()
Мы создаем список по умолчанию, содержащий текст для добавления к каждой кнопке в качестве отдельных элементов списка.Затем мы перебираем этот список, чтобы создать каждую кнопку для каждого элемента, назначаем текст кнопки этому элементу и затем добавляем его в наш отдельный список кнопок.