Загрузка...

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

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

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