如何通过 PySide 上的另一个线程从 QMainWindow class 捕获信号?
How to catch a Signal from QMainWindow class by another thread on PySide?
我有一个 MainWindow class,上面有一个 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'
有什么办法可以解决这个问题吗?
提前致谢!
信号就像方法一样 - 它们必须绑定到实例。如果您尝试通过 class.
直接访问它们,它们将无法正常工作
修复该示例的一种方法是将 MainWindow
的实例作为线程的父级传入,如下所示:
self.newThread = workThread(self)
...
parent.mySignal.connect(self.printMessage)
我有一个 MainWindow class,上面有一个 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'
有什么办法可以解决这个问题吗? 提前致谢!
信号就像方法一样 - 它们必须绑定到实例。如果您尝试通过 class.
直接访问它们,它们将无法正常工作修复该示例的一种方法是将 MainWindow
的实例作为线程的父级传入,如下所示:
self.newThread = workThread(self)
...
parent.mySignal.connect(self.printMessage)