gpt4 book ai didi

python - 在 Tkinter 中执行函数期间程序卡住

转载 作者:太空狗 更新时间:2023-10-29 21:50:38 29 4
gpt4 key购买 nike

我为我的一个脚本创建了一个小 GUI。一切正常。

当我单击一个按钮时,它会启动一个大功能,该功能正在解析来自某些网站的大量数据。

但是一旦我点击按钮,程序就会卡住,直到函数完全运行。一切正常,但为什么我的 GUI 在函数执行期间卡住。我想打印一个小进度条,但这是不可能的。

部分程序如下:

    self.Button1 = Button(self.MENU, text="IELTS", command=self.My_Command)
self.Button1.grid(row=0, column=0,sticky=W+E)

def My_Command(self):

## HERE WE LAUNCH THE FUNCTION
Module_1.main() # My Big Function from another file

self.Button1.config(text="DONE")

在执行 Module_1.main() 期间我无法执行/打印任何内容...GUI 完全卡住。

Module_1.main()函数是一个线程解析器(解析两个网站的一些数据),一般需要2分钟运行。如果有人有想法能够在执行此功能所需的 2 分钟内与程序进行交互,那将非常有帮助。

最佳答案

Tkinter 是单线程的。屏幕更新发生在事件循环的每次行程中。任何时候你有一个长时间运行的命令,你都在阻止事件循环完成迭代,从而阻止事件的处理,从而防止重绘。

您唯一的解决方案是 a) 为长时间运行的命令使用一个线程,b) 为长时间运行的命令使用一个进程,或者 c) 将命令分成小块,每个 block 可以在几毫秒内运行,这样您可以在事件循环的后续迭代中运行一个 block 。您还有另一种解决方案,即定期调用小部件的 update_idletasks 方法,但这更像是一种解决方法,而不是修复方法。

请记住 Tkinter 不是线程安全的,因此使用线程需要格外小心。您只能从主线程调用小部件上的方法,这意味着其他线程必须通过线程安全队列与主线程通信。

关于python - 在 Tkinter 中执行函数期间程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847626/

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