首页 > 解决方案 > Python tkinter 更新函数冻结主函数

问题描述

我有一个带有 python API(支持 python 3)的 Windows 应用程序。您可以提供一个具有主要功能的类。在程序启动时,会创建此类的一个实例,并定期调用 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 不允许这样做,所以它不起作用。

感谢您的任何帮助。

标签: pythonpython-3.xtkinterpython-multithreading

解决方案


推荐阅读