在PyQt5中,类之间的信号和槽连接方式与在同一类中连接信号和槽的方法类似,只需要使用相应类的对象来连接信号和槽即可。
以下是一个示例代码,展示了如何在两个类之间连接信号和槽:
import sys
from PyQt5.QtCore import Qt, pyqtSignal, QObject
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton
class MySignal(QObject):
signal = pyqtSignal(str)
class Sender(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
layout = QVBoxLayout()
self.button = QPushButton('Send Signal')
self.button.clicked.connect(self.sendSignal)
layout.addWidget(self.button)
self.setLayout(layout)
def sendSignal(self):
self.mysignal.signal.emit('Hello, Receiver!')
class Receiver(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Receiver')
def receiveSignal(self, message):
print(message)
if __name__ == '__main__':
app = QApplication(sys.argv)
sender = Sender()
receiver = Receiver()
mysignal = MySignal()
mysignal.signal.connect(receiver.receiveSignal)
sender.mysignal = mysignal
sender.show()
receiver.show()
sys.exit(app.exec_())
在上述示例代码中,我们定义了三个类:MySignal类,Sender类和Receiver类。MySignal类定义了一个信号signal,Sender类中定义了一个按钮,并在按钮点击时发射signal信号,Receiver类中定义了一个receiveSignal槽函数来接收signal信号。在主函数中,我们创建了一个MySignal对象mysignal,并将其signal信号连接到Receiver对象的receiveSignal槽函数。然后,我们将Sender对象的mysignal属性设置为mysignal对象,并显示两个窗口。
需要注意的是,在连接类之间的信号和槽时,需要使用相应类的对象来连接信号和槽,同时需要确保对象的作用域和生命周期与信号和槽的连接相符合。
以上是一个简单的类之间连接信号和槽的例子,可以根据实际需求进行修改和扩展。