Python 在tkinter中的函数内调用函数
从按钮调用Python 在tkinter中的函数内调用函数,python,tkinter,Python,Tkinter,从按钮调用rest函数时,调用start函数并每秒继续打印值,但当我再次调用rest函数时,再次调用start函数,但这次以2x速度启动函数打印值,以此类推 但我不想以2倍的速度打印值。我正在做一个小项目,在那里我面临这种类型的问题,所以这就是为什么我写这个小代码。请解决我的问题 import tkinter as tk window = tk.Tk() window.geometry('400x400') i = 0 def start(): global i text_
rest
函数时,调用start
函数并每秒继续打印值,但当我再次调用rest
函数时,再次调用start
函数,但这次以2x速度启动函数打印值,以此类推
但我不想以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
,都会启动一个新的回调
,它将无限期地每隔100毫秒调用start
。每个回调都是独立的,并且不知道其他回调,这会导致一系列回调,每个回调都在自己的时间内,每100毫秒调用一次start
为了避免这种“滚雪球”,您需要取消以前的回调以正确重置。您可以通过在回调
上保留一个引用,并在重置
中调用tk.after\u cancel(callback\u id)
来完成此操作
像这样:
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()
如果回调id不是None,则为
,
与如果回调id!=无
?呵呵,是,否-在这种情况下,是。查看详细信息。tk.after
返回一个指向回调的引用(指针),您可以使用cb\u id=tk.after…
跟踪该回调。然后,使用此引用以tk.after\u cancel(cb\u id)
取消回调。tkinter/tcl
内部关于如何实现这一点并不重要,但如果您感兴趣,可以在线查找代码。我想问自己一个重要的问题是:“当按下两次按钮时,我预计会发生什么?”甚至可以按两次按钮,还是在按下按钮后将其禁用?@fhdrsdg为什么要禁用“重置”按钮?那他们怎么复位呢?按钮和功能不是“复位”,而是“休息”。我把它理解为一个用来记录某人或某物休息时间的按钮,但它也可以被理解为一个重置按钮。在这种情况下,我的问题的答案是明确的,但在我阅读它的方式不是。