Python新风格信号和线程与gui app之间的插槽
发布时间:2020-12-20 13:47:56 所属栏目:Python 来源:网络整理
导读:我是OOP和 python的新手.我正在尝试使用新的样式信号和插槽从Qthread向Qt GUI主窗口发出信号. 这是线程.在GUI中点击RUN按钮后3秒内,我将发出信号,用于更新GUI中的消息对话框.我不确定继承是否定义好或者是否以正确的方式定义了信号. class OptimThread (QtCo
我是OOP和
python的新手.我正在尝试使用新的样式信号和插槽从Qthread向Qt GUI主窗口发出信号.
这是线程.在GUI中点击RUN按钮后3秒内,我将发出信号,用于更新GUI中的消息对话框.我不确定继承是否定义好或者是否以正确的方式定义了信号. class OptimThread (QtCore.QThread): signalUpdateMessageDialog = QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QString)") def __init__(self): QtCore.QThread.__init__(self) def run(self): start = time.time() self.emit(self.signalUpdateMessageDialog,time.time() - start,'Initialising...') time.sleep(3) self.emit(self.signalUpdateMessageDialog,'You waited 3 seconds...') 主类和应用程序部分是这样的(我省略了其他可能不相关的代码). class Main(QtGui.QMainWindow,Ui_MainWindow): def __init__(self,parent=None): super(Main,self).__init__(parent) def updateMessageDialog(self,times,dialog): hours = str(datetime.timedelta(seconds=int(times))) self.MessageDialog.insertHtml('<tt>' + hours + ':</tt> ' + dialog + '<br>') return def clickRun(self): self.optimThread = OptimThread() self.connect(self.optimThread,QtCore.SIGNAL("updateMessageDialog(PyQt_PyObject,QString)"),self.updateMessageDialog) #self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog) self.optimThread.start() if __name__ == '__main__': app=QtGui.QApplication(sys.argv) window=Main(None) app.setActiveWindow(window) window.show() sys.exit(app.exec_()) # Exit from Python 如果evertyhing是这样写的,那就有效. self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog) 它说:
我感谢您的建议(与主题相关并与风格相关),并为不制作MWE而道歉. 解决方法
您的示例的结构或多或少是正确的:但您将旧式信号槽语法与新风格混合在一起.
信号定义应如下所示: class OptimThread(QtCore.QThread): signalUpdateMessageDialog = QtCore.pyqtSignal(int,str) 信号应该像这样发出: self.signalUpdateMessageDialog.emit( time.time() - start,'Initialising...') 这就是信号的连接方式: self.optimThread.signalUpdateMessageDialog.connect( self.updateMessageDialog) 使用新式语法,从不需要使用SIGNAL()或SLOT(),并且永远不必指定C签名. 有关详细信息,请参阅PyQt4 reference中的New-style Signal and Slot Support. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |