gpt4 book ai didi

python - Tkinter:创建异步计时器,但 time 和 tk.after 都不起作用,导致无限循环

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:32 25 4
gpt4 key购买 nike

我试图创建一个每秒更新 Tkinter GUI 的计时器,但 time 和 tk.after 实际上都没有延迟时间,导致我的程序崩溃。我使用这个计时器来更新主线程中的小部件,同时另一个工作进程运行测试。这是我尝试过的(仅相关部分):

import time
import threading
from Tkinter import *

class View(Frame):
def __init__(self, top):
Frame.__init__(self, top)
self.top = top
self.async_update_thread = threading.Thread(target=self.async_update, args=(self.top,))
self.async_update_thread.start()

def async_update(self, top):
top.update()
top.after(1000, self.async_update(top))
'''
while True:
top.update()
time.sleep(1)
'''

if (__name__ == '__main__'):
top = Tk()
top.geometry("1250x750")
View(top)
top.mainloop()

此代码会导致以下错误:

TclError: out of stack space (infinite loop?)

我应该如何处理这个似乎忽略我的延迟设置的错误?

最佳答案

考虑这段代码:

top.after(1000, self.async_update(top))

与此代码完全相同:

result = self.async_update(top)
top.after(1000, result)

看出问题了吗? after 需要一个可调用。相反,您会立即调用该函数。

调用after的正确方法是这样的:

top.after(1000, self.async_update, top)

关于python - Tkinter:创建异步计时器,但 time 和 tk.after 都不起作用,导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com