Загрузка...

How to make a timer that will not freeze the program?

Thread in Python created by десептикон Aug 1, 2025 at 11:26 PM. 105 views

  1. десептикон
    десептикон Topic starter Aug 1, 2025 at 11:26 PM she/her 2297 Mar 29, 2021
    делаю программу, в которой в течении 30 секунд будет длиться раунд. после истечения времени игра должна прекратиться и вернуться в меню обратно. при использовании библиотеки time или функции after() в tkinter приложение замораживается, и нельзя нормально сыграть раунд. как решить проблему? нейронка пишет хуйню какую то, не знаю где еще спросить
     
  2. Финляндия
    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()
    на
     
    1. View previous comments (2)
    2. десептикон Topic starter
      Финляндия, поч проебал то?) много возможностей же
    3. Финляндия
  3. n1s_01
    а че асрнхронный таймер не канает? который саму приложуху не замораживает а конкретный процесс ждать заставляет
     
    1. десептикон Topic starter
      n1s_01, слушай не проходил асинхронность еще, я думал что через after() можно, гпт какую то дичь писал. Обязательно посмотрю про асинхронность
    2. n1s_01
      десептикон, кстати можешь after ток делай его маленькими интервалами там по 3-4 секунды тчо бы не зависало
    3. десептикон Topic starter
      n1s_01, пробовал, все равно зависает сразу. Мне важно чтобы на протяжении всего "раунда" ниче не фризило
  4. doublepurpose
    в поток отдельный выведи
     
Top
Loading...