我有一个奇怪的问题。我正在编写一个多线程应用程序,并使用SIGNALS将QThread的数据传递给GUI类数据。不用多说,这是一个简化的代码。
class GUI(uiMainWindow.MainWindow):
def __init__(self, parent=None):
super etc
self.thread = Thread()
self.connect(self.thread, SIGNAL("changeStatus(QString)"), self.setStatus, Qt.QueuedConnection)
def setStatus(self, status):
self.statusBar.setText(status)
class Thread(QThread):
def __init__(self, parent=None, create=True):
super etc
self.create = create
def run(self):
if self.create:
create_data()
if not self.create:
upload_data()
def create_data(self):
self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
#rest of the code
def upload_data(self):
self.emit(SIGNAL("changeStatus(QString)"), "Changing the statusbar text")
非常基本,对吗?但是,问题出在这里:self.emit仅在create_data函数中有效,但在upload_data中无效(或者就此而言,在任何其他函数中;我也尝试将它放在__init__
中)。我尝试将print "I got the status" + status
放在setStatus函数中。同样,它适用于create_data()函数,但不适用于upload_data()函数。
两个函数之间的差异相对较小,据我所知,没有任何东西干扰self.emit函数 - 事实上,在两种情况下,self.emit只有4-5行“离开”来自功能定义。
这对我来说真是令人费解。有帮助吗?提前谢谢!
编辑:再说一遍,据我所知,这两个函数的唯一区别在于run() - 如果create参数为True则调用第一个函数,如果是False则调用第二个函数。答案 0 :(得分:1)
我的帖子是正确的。 Thread()和Thread(create = False)之间的区别至关重要。我必须定义一个新方法(一个是self.thread = Thread()
而另一个self.diff_thread = Thread(create=False)
)并连接到不同的插槽以使其工作。