如何捕获信号从QMainWindow类的另一个线程在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。"信号"对象没有属性"连接"

有什么办法可以解决这个问题吗?提前感谢!

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

修复这个例子的一种方法是传递MainWindow in的实例作为线程的父线程,如下所示:
    self.newThread = workThread(self)
    ...
    parent.mySignal.connect(self.printMessage)

相关内容

  • 没有找到相关文章

最新更新