#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)