Загрузка...

Как сделать таймер, который не будет замораживать программу?

Тема в разделе Python создана пользователем десептикон 1 авг 2025 в 23:26. 82 просмотра

  1. десептикон
    десептикон Автор темы 1 авг 2025 в 23:26 she/her 2294 29 мар 2021
    делаю программу, в которой в течении 30 секунд будет длиться раунд. после истечения времени игра должна прекратиться и вернуться в меню обратно. при использовании библиотеки time или функции after() в tkinter приложение замораживается, и нельзя нормально сыграть раунд. как решить проблему? нейронка пишет хуйню какую то, не знаю где еще спросить
     
    1 авг 2025 в 23:26 Изменено
  2. Финляндия
    Код
    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()
    на
     
    1. Посмотреть предыдущие комментарии (2)
    2. десептикон Автор темы
      Финляндия, поч проебал то?) много возможностей же
    3. Финляндия
    4. maca
      2 авг 2025 в 01:12 Изменено
  3. n1s_01
    а че асрнхронный таймер не канает? который саму приложуху не замораживает а конкретный процесс ждать заставляет
     
    1. десептикон Автор темы
      n1s_01, слушай не проходил асинхронность еще, я думал что через after() можно, гпт какую то дичь писал. Обязательно посмотрю про асинхронность
    2. n1s_01
      десептикон, кстати можешь after ток делай его маленькими интервалами там по 3-4 секунды тчо бы не зависало
    3. десептикон Автор темы
      n1s_01, пробовал, все равно зависает сразу. Мне важно чтобы на протяжении всего "раунда" ниче не фризило
Top
Загрузка...