将线程信号连接到MainWindow
问题描述:
我有两个类。一个是mainWindow类,另一个是更新进度条的线程等等。将线程信号连接到MainWindow
更新我使用的是信号/槽结构是这样的进度:(我显示相关代码):
import threading
from PyQt4 import QtCore, QtGui, Qt
class MyThread(threading.Thread):
mySignal = QtCore.pyqtSignal(int, int)
def __init__(self,*args):
threading.Thread.__init__(self)
class Form1(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
...
...
@pyqtSlot(int, int)
def updateProgress(self, arg1, arg2):
print "TEST Argument1: ", arg1
print "TEST Argument2: ", arg2
def my_function(self):
mt = MyThread(*args)
mt.mySignal .connect(self.updateProgress)
mt.start()
而且我得到这个,我不是一定要了解:
mt.mySignal .connect(self.updateProgress)
TypeError: pyqtSignal must be bound to a QObject, not 'MyThread'
答
您需要从继承QThread,而不是python Thread。否则,对于信号/插槽跨线程边界工作至关重要的QObject-Thread-ownership不起作用,这是神奇的。
它工作完美,谢谢....真是惊人的如何在代码中的这样一个小的变化使差异....它实际上从崩溃到工作只是通过改变几行 – codeKiller 2014-10-19 09:14:18