【发布时间】:2012-06-06 12:55:00
【问题描述】:
我为我的一个脚本创建了一个小 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 分钟内与程序进行交互,那将非常有帮助。
【问题讨论】:
-
这对于 codereview.stackexchange.com 来说可能是一个更好的主题。听起来您的解析应该在一个单独的线程中而不是(即使您说它是线程的)我认为需要更多上下文来回答这个问题,您能否提供指向 github、ideone.com 或 pastebin 上完整代码的链接.com?
-
很糟糕,我现在无法访问代码,但你给了我一个答案。解析器是线程的,但函数不是。所以我需要把函数和GUI放在两个单独的线程中......!谢谢 ;)
-
@Brady:不再需要上下文。这是一个众所周知的 Tkinter 反模式。
-
@BryanOakley,我也想通了,谢谢
标签: python multithreading user-interface tkinter