Python新风格信号和线程与gui app之间的插槽

Python新风格信号和线程与gui app之间的插槽,第1张

概述我是OOP和 python的新手.我正在尝试使用新的样式信号插槽从Qthread向Qt GUI主窗口发出信号. 这是线程.在GUI中点击RUN按钮后3秒内,我将发出信号,用于更新GUI中的消息对话框.我不确定继承是否定义好或者是否以正确的方式定义了信号. class OptimThread (QtCore.QThread): signalUpdateMessageDialog = Qt 我是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是这样写的,那就有效.
然而,如果我想在Main中使用新样式进行连接:

self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog)

它说:

self.optimThread.signalUpdateMessageDialog.connect(self.updateMessageDialog)
AttributeError: ‘str’ object has no attribute ‘connect’

我感谢您的建议(与主题相关并与风格相关),并为不制作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.

总结

以上是内存溢出为你收集整理的Python新风格信号和线程与gui app之间的插槽全部内容,希望文章能够帮你解决Python新风格信号和线程与gui app之间的插槽所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存