打电话时rest
来自按钮的功能,然后start
函数被调用并每秒继续打印值但是当我再次调用时rest
函数start
再次调用函数,但这次启动函数以 2 倍速度打印值,依此类推。
但我不想以 2 倍速度打印值。我正在做一个小项目,我遇到了这类问题,所以这就是我编写这个小代码的原因。请解决我的问题
import tkinter as tk
window = tk.Tk()
window.geometry('400x400')
i = 0
def start():
global i
text_label .config(text=i)
i += 1
text_label .after(1000, start)
def rest():
global i
i=0
start()
text_label = tk.Label(window, text="start")
text_label .pack()
tk.Button(window, text="rest", command=rest).pack()
window.mainloop()
发生的事情是每次你打电话时reset
, a new callback
启动后会调用start
无限期地每 100 毫秒一次。每个回调都是独立的,并且不了解其他回调,这会导致一系列回调,每个回调都调用start
在他们自己的时间,每 100 毫秒。
为了避免这种“滚雪球”现象,您需要取消之前的回调才能正确重置。您可以通过保留对callback
,并调用tk.after_cancel(callback_id)
in reset
.
像这样:
import tkinter as tk
def start():
global i, callback_id
text_label.config(text=i)
i += 1
callback_id = text_label.after(1000, start)
def reset():
global i, callback_id
i = 0
if callback_id is not None:
text_label.after_cancel(callback_id)
callback_id = None
start()
window = tk.Tk()
window.geometry('400x400')
text_label = tk.Label(window, text="start")
text_label.pack()
callback_id, i = None, 0
tk.Button(window, text="reset", command=reset).pack()
window.mainloop()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)