繁体   English   中英

如何通过PySide上的另一个线程从QMainWindow类捕获Signal?

[英]How to catch a Signal from QMainWindow class by another thread on PySide?

我有一个MainWindow类,该类上运行有Gui应用程序,我希望每次我从应用程序中单击按钮时,都会发出信号并被另一个线程捕获。 有我的示例代码(很抱歉,我没有发布我的真实代码,但现在确实很大):

from PySide.QtGui import *
from PySide.QtCore import *
import sys
import mainGui    #Gui file

class MainWindow(QMainWindow, mainGui.Ui_MainWindow):

mySignal = Signal()


    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.newThread = workThread()
        self.newThread.start()

        #myButton is part of Gui application
        self.myButton.clicked.connect(self.myfunction)

    def myfunction(self):
        self.mySignal.emit()

    (...) #Other functions and methods

class workThread(QThread):
     def __init__(self, parent=None):
         super(workThread, self).__init__(parent)

         #The problem:
         MainWindow.mySignal.connect(self.printMessage)

     def run(self):
          (...)

     def printMessage(self):
         print("Signal Recived")
         (...)


def main():
    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    app.exec_()

if __name__=="__main__":
    main()

...并且出现以下错误:MainWindow.mySignal.connect(self.printMessage)AttributeError:'PySide.QtCore.Signal'对象没有属性'connect'

有什么想法我该如何解决? 提前致谢!

信号就像方法一样-它们必须绑定到实例。 如果您尝试直接通过类访问它们,它们将无法正常工作。

解决该示例的一种方法是将MainWindow的实例作为线程的父级传入,如下所示:

    self.newThread = workThread(self)
    ...

    parent.mySignal.connect(self.printMessage)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM