如何在PyQt中连接Signal和Slot

时间:2016-04-03 08:30:42

标签: pyqt qt4 signals-slots

我的编译环境是PyQt4,Qt4,Python2.在我的代码中,有一个信号:

class ReadThread(QtCore.QThread):
    #always read UART RX pin
    def __init__(self,parent=None):
        QtCore.QThread.__init__(self,parent)
        self.trigger=QtCore.pyqtSignal()#creat a signal

    def run(self):
        #thread stop when the "run" function is over
        for i in range (25536):
            pass
        self.trigger.emit()

Class ChatDialog中有一个Slot()。

class ChatDialog(QtGui.QDialog):
    #dialog contain two widget-"recived"and"send"
    def __init__(self,parent=None):
        QtGui.QDialog.__init__(self,parent)
        self.ui=Ui_Dialog()
        self.ui.setupUi(self)

    @QtCore.pyqtSlot()
    def print_slot():
        print "reciece str"

我写__main__ like this:

if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        myqq=ChatDialog()
        myqq.show()
        read=ReadThread()
        read.trigger.connect(myqq.print_slot,QueuedConnection)
        read.start()
        sys.exit(app.exec_())

但我的" read.trigger.connect(myqq.print_slot,QueuedConnection)"是错的。如何连接信号和插槽?谢谢

1 个答案:

答案 0 :(得分:0)

必须将信号定义为类属性。您无法在实例上创建信号。

class ReadThread(QtCore.QThread):

    trigger = QtCore.pyqtSignal()

    def __init__(self,parent=None):
        QtCore.QThread.__init__(self,parent)