Tkinter: Взятие переменной из метки в цикле for

#python #tkinter

#питон #tkinter

Вопрос:

В настоящее время я занимаюсь проектом создания «Закрой дверь, игра в кости». Я использовал цикл for для обозначения «двери», теперь моя проблема в том, как обновить «дверь» до «-» после нажатия правильной «двери».

 import tkinter, random  window = tkinter.Tk(); window.title("Dice Game - Shut the DOOR")  def roll():  result["text"] = int(random.randint(1,6))  result_2["text"] = int(random.randint(1,6))  for door in range(12):  number = tkinter.Label(window, text=door 1)  number.grid(row=0, column=door, sticky="e")  result = tkinter.Label(text="-") result_2= tkinter.Label(text="-") result.grid(row=1, column=0) result_2.grid(row=1,column=1, sticky="w")   dice = tkinter.Button(window, text="Roll", command=roll) dice.grid(row=2, column=0)  

Спасибо за помощь

Ответ №1:

Используйте .bind("lt;Buttongt;", function) для выполнения каких-либо действий при нажатии на метку (или любой другой виджет). Сначала определите функцию для обработки события, затем добавьте number.bind("lt;Buttongt;", function_name) , чтобы функция выполнялась при number нажатии.

Tkinter автоматически передаст аргумент функции, содержащий информацию о событии, поэтому функция должна принять один аргумент. Это используется для определения того, на какой номер был нажат.

Полный код:

 import tkinter, random  window = tkinter.Tk(); window.title("Dice Game - Shut the DOOR")  def change_text(event):   number = event.widget  if result["text"] == "-" or number["text"] == "-": return  if int(result["text"])   int(result_2["text"]) == int(number["text"]):  number["text"] = "-"  def roll():  result["text"] = int(random.randint(1,6))  result_2["text"] = int(random.randint(1,6))  for door in range(12):  number = tkinter.Label(window, text=door 1, width=1)  number.grid(row=0, column=door, sticky="e")  number.bind("lt;Buttongt;", change_text)  result = tkinter.Label(text="-") result_2= tkinter.Label(text="-") result.grid(row=1, column=0) result_2.grid(row=1,column=1, sticky="w")   dice = tkinter.Button(window, text="Roll", command=roll) dice.grid(row=2, column=0)