Member 14016849 Ответов: 1

Почему этот таймер Python tkinter не работает


Я хочу, чтобы это отображалось как 1(подождите), 2 (подождите), 3(Подождите) после нажатия кнопки. Вместо этого, когда я нажимаю кнопку, она останавливается на секунду, а затем становится 3


from tkinter import *
from time import *
import tkinter as tk


root = tk.Tk()

root.title("Project")

def clicked1():
    timer = 0
    i = 0
    previous = 0
    while (i < 3):
        previous = previous + 1
        label1.config(text = previous)
        sleep(1)
        i += 1
        
Button1 = tk.Button(root, text = "Click", width = 10, bg = "black",fg = "white", command =clicked1)
Button1.pack(side=TOP)

label1 = tk.Label(root, text = " ", fg = "black",bg = "white")
label1.pack(side = BOTTOM)

root.configure(background="white")
root.geometry("300x600")

root.mainloop()


Что я уже пробовал:

переключение вокруг того места, где находится спящий режим(1)

1 Ответов

Рейтинг:
1

Richard MacCutchan

Это происходит потому, что ваш вызов сна останавливает поток, который пытается обновить дисплей. Так что ничего не меняется до последнего выхода из спящего режима, когда на дисплее появится цифра 3. Вам нужно запустить таймер в отдельном потоке, чтобы он позволял потоку графического интерфейса обновлять дисплей при изменении каких-либо данных.


Member 14016849

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

Richard MacCutchan

К сожалению, вам придется искать самому, у меня их нет. Найдите "gui multi thread python" и посмотрите, что получится. Вы также можете обнаружить, что изучение раздела TK в документации python может помочь. Видеть 25. графические интерфейсы пользователя с документацией Tk — Python 3.4.9[^].