Python tkinter更新函数冻结主函数

Python tkinter更新函数冻结主函数,python,python-3.x,tkinter,python-multithreading,Python,Python 3.x,Tkinter,Python Multithreading,我有一个带有python API的windows应用程序(支持python 3)。您可以提供一个具有main函数的类。在程序启动时,将创建此类的实例,并定期调用main函数。我可以配置频率,但没有其他功能。(我不能改变API的工作方式) 现在,我想使用tkinter进行一些可视化、图表等。以下是我当前班级结构的一个示例: import tkinter as tk class Script: def __init__(self): self.root = tk.Tk()

我有一个带有python API的windows应用程序(支持python 3)。您可以提供一个具有main函数的类。在程序启动时,将创建此类的实例,并定期调用main函数。我可以配置频率,但没有其他功能。(我不能改变API的工作方式)

现在,我想使用tkinter进行一些可视化、图表等。以下是我当前班级结构的一个示例:

import tkinter as tk

class Script:

    def __init__(self):
        self.root = tk.Tk()
        self.count = 0
    
    def main(self):
        # do some stuff
        print(str(self.count))
        self.count += 1
        
        # update gui
        self.root.update()

# This is to simulate the software behavior.

import time

scriptInstance = Script()

for i in range(0, 20 * 10):
    scriptInstance.main()
    time.sleep(0.1)
我遇到的主要问题是,只要与Tkinter交互,root.update()方法就会冻结主函数。通过上面的示例,您可以看到,只要您移动窗口,数字就不会计数。有没有办法防止这种情况发生

我试图从另一个线程调用root.update(),但由于Tkinter不允许这样做,因此该线程不起作用


谢谢您的帮助。

尝试了
after()
方法?是的,我厌倦了
self.root.after(1,self.root.update)
而不是直接调用
self.root.update()
。但它不起作用。Gui更新未发生,窗口未出现。在其他示例中,总是使用
after()
来运行其他代码,然后调用tkinter mainloop或update。这在我的例子中不起作用,因为API期望主函数返回。我做了一些更改并添加了一个答案,请注意,(1,func)之后只等待一微秒。你的意思是在(1000,func)之后吗?我不需要延迟(并且增加数字不会改变结果)。想法是继续使用
main()
-方法,并让
self.root.update()
after()触发。但是,我想您需要调用
update()
来处理
after()
mehod。(鸡蛋困境)尝试了
after()
方法?是的,我厌倦了
self.root.after(1,self.root.update)
而不是直接调用
self.root.update()
。但它不起作用。Gui更新未发生,窗口未出现。在其他示例中,总是使用
after()
来运行其他代码,然后调用tkinter mainloop或update。这在我的例子中不起作用,因为API期望主函数返回。我做了一些更改并添加了一个答案,请注意,(1,func)之后只等待一微秒。你的意思是在(1000,func)之后吗?我不需要延迟(并且增加数字不会改变结果)。想法是继续使用
main()
-方法,并让
self.root.update()
after()触发。但是,我想您需要调用
update()
来处理
after()
mehod。(鸡蛋两难)