делаю программу, в которой в течении 30 секунд будет длиться раунд. после истечения времени игра должна прекратиться и вернуться в меню обратно. при использовании библиотеки time или функции after() в tkinter приложение замораживается, и нельзя нормально сыграть раунд. как решить проблему? нейронка пишет хуйню какую то, не знаю где еще спросить
import tkinter as tk class GameApp: def __init__(self, root): self.root = root self.root.title("Игра с таймером") self.time_left = 30 self.label = tk.Label(root, text="", font=("Arial", 24)) self.label.pack(pady=20) self.start_button = tk.Button(root, text="Начать раунд", command=self.start_round) self.start_button.pack(pady=10) self.menu_label = tk.Label(root, text="", font=("Arial", 18)) self.menu_label.pack(pady=10) def start_round(self): self.time_left = 30 self.label.config(text=f"Осталось: {self.time_left} сек.") self.menu_label.config(text="") self.start_button.config(state="disabled") # Запускаем обратный отсчёт self.update_timer() def update_timer(self): if self.time_left > 0: self.time_left -= 1 self.label.config(text=f"Осталось: {self.time_left} сек.") self.root.after(1000, self.update_timer) # Повтор через 1 секунду else: self.end_round() def end_round(self): self.label.config(text="Раунд окончен") self.menu_label.config(text="Возврат в меню...") self.start_button.config(state="normal") # Запуск root = tk.Tk() app = GameApp(root) root.mainloop() Code import tkinter as tk class GameApp: def __init__(self, root): self.root = root self.root.title("Игра с таймером") self.time_left = 30 self.label = tk.Label(root, text="", font=("Arial", 24)) self.label.pack(pady=20) self.start_button = tk.Button(root, text="Начать раунд", command=self.start_round) self.start_button.pack(pady=10) self.menu_label = tk.Label(root, text="", font=("Arial", 18)) self.menu_label.pack(pady=10) def start_round(self): self.time_left = 30 self.label.config(text=f"Осталось: {self.time_left} сек.") self.menu_label.config(text="") self.start_button.config(state="disabled") # Запускаем обратный отсчёт self.update_timer() def update_timer(self): if self.time_left > 0: self.time_left -= 1 self.label.config(text=f"Осталось: {self.time_left} сек.") self.root.after(1000, self.update_timer) # Повтор через 1 секунду else: self.end_round() def end_round(self): self.label.config(text="Раунд окончен") self.menu_label.config(text="Возврат в меню...") self.start_button.config(state="normal") # Запуск root = tk.Tk() app = GameApp(root) root.mainloop() на
а че асрнхронный таймер не канает? который саму приложуху не замораживает а конкретный процесс ждать заставляет
n1s_01, слушай не проходил асинхронность еще, я думал что через after() можно, гпт какую то дичь писал. Обязательно посмотрю про асинхронность
десептикон, кстати можешь after ток делай его маленькими интервалами там по 3-4 секунды тчо бы не зависало
n1s_01, пробовал, все равно зависает сразу. Мне важно чтобы на протяжении всего "раунда" ниче не фризило