【发布时间】:2020-09-23 03:01:05
【问题描述】:
我对使用 Tkinter 很陌生,我正在尝试构建一个将计时器显示为其功能之一的应用程序。我正在更新标签以显示来自单独线程的时间。显示屏上的时间更新不顺畅。它会在短时间内冻结,然后跳跃一秒钟或更长时间。有没有办法让更新保持一致以使计时器顺畅?
到目前为止,这是一个简单的应用程序,因此 CPU 或主线程似乎不应该忙于做其他事情。当您按下按钮时,它会启动一个单独的线程,该线程会定期设置标签文本。我试过每次更新睡 0-0.1 秒,结果是一样的。
window = tk.Tk()
frame2 = tk.Frame(master=window, width=50, height=50, bg="yellow")
frame2.pack()
time_display = tk.Label(master=frame2, text="0.0")
time_display.pack()
update_thread = None
def play_pause():
global update_thread, stop_loop
if not update_thread:
stop_loop = False
update_thread = threading.Thread(target=update_timer_loop)
update_thread.start()
else:
stop_loop = True
update_thread = None
stop_loop = False
def update_timer_loop():
global window
start = time.time()
base_time = float(time_display["text"])
while not stop_loop:
current_time = time.time() - start + base_time
window.after(0, lambda: set_text(round(current_time, 2)))
time.sleep(0.1)
def set_text(text):
time_display["text"] = text
btn_play = tk.Button(master=frame1, text="Play/Pause", command=play_pause)
btn_play.pack(side=tk.LEFT)
【问题讨论】: