Моя цель - активировать цикл нажатием кнопки, чтобы индекс (количество) отображался в поле по мере его увеличения.Цикл должен иметь одинаковое время выполнения (для данного счетчика) независимо от того, сколько раз нажата кнопка.
Следующая функция do_the_loop () делает это хорошо - с одной проблемой: цикл замедляетсяпостепенно уменьшается по мере увеличения абсолютного счета (после одного нажатия кнопки и продолжается более одного нажатия кнопки).Время, необходимое для выполнения функции более или менее, удваивается при каждом выполнении (нажатие кнопки).Я рассчитал части цикла "Label (...). Place (...)" и "update ()", чтобы определить источник замедления, и, похоже, он находится в "update ()".ОДНАКО, перемещая функцию «update ()» из цикла «while», происходит примерно такое же замедление, даже если «update ()» выполняется только один раз за цикл вместо 1000 раз.(Попробуйте: закомментируйте «root.update ()» в цикле while и снимите комментарий выше «count = 1»).В этих условиях цикл while выполняется примерно за треть секунды последовательно.Следовательно, проблема, похоже, не в «update ()» как таковой.Кажется, там где-то прячется гремлин, и я скучаю по нему.
Буду признателен за любой свет, который кто-нибудь может осветить в этом вопросе.Я использую Python 3.7.1 и Windows 10. Спасибо.
from tkinter import *
import time
root = Tk()
root.title("Slowdown Problem")
root.geometry("300x250+1335+0")
root.configure(background="lightgray")
def do_the_loop():
# Erases the count when button is pressed
canvas = Canvas(root, height= 30, width=60, bg="powderblue")
canvas.place(x=115, y=145)
#root.update()
count = 1
total_count = 1000
start = time.perf_counter()
while count <= total_count:
Label(root, height=1, width=5, anchor=E, background="powderblue",
text=str(count),
fg="red", font=("Arial Black", 10)).place(x=120, y=150)
root.update() # Update the display with each count
count += 1
print("Count:", count, " Loop time:", str(time.perf_counter() - start))
#======================== CREATE GO BUTTON ==============================
Button(root, text=" GO ", font=("Arial Black", 20), bd=7, command=do_the_loop,
bg="light green", height=2, width=7).place(x=70, y=20)
root.mainloop()