【发布时间】:2011-12-12 23:47:24
【问题描述】:
我有一个用 Python 编写的相对较大的应用程序,并使用 PyQT 作为 GUI 前端。整个应用程序在一个类中,在一个文件中。
这是一个示例代码:
class Application(QMainWindow):
def __init__(self):
super(etc...)
self.connect(self.mainBtn, SIGNAL("clicked()"), self.do_stuff)
def do_stuff(self):
<checking some parameters>
else:
do_some_other_long_stuff()
def do_some_other_long_stuff(self):
500 lines of code of stuff doing
但是,这就是问题所在:当我单击 mainBtn 时,一切正常,除了 GUI 冻结 - 在执行该功能之前我不能做任何其他事情(而且它是一个网络爬虫,所以它需要相当长的时间一点时间)。当函数 do_some_other_long_stuff 结束时,一切恢复正常。这真的很烦人。
有没有办法以某种方式“背景化” do_some_other_stuff 过程?我查看了 QThreads,它似乎就是这样做的,但这需要我重写所有代码,将我的程序的一半放在不同的类中,因此必须更改所有变量名(从 GUI 获取变量时)课并把它放在工人阶级)
【问题讨论】: