在 PyQt 中,不同类之间的信号和槽连接方法与同一类之间的信号和槽连接方法类似。需要注意的是,不同类之间的信号和槽连接可能需要在不同的地方进行。下面给出一个例子,演示了如何在两个不同的类之间连接信号和槽:
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
class MyWidget(QPushButton):
my_signal = pyqtSignal(int)
def __init__(self, parent=None):
super().__init__('Click me', parent=parent)
def mousePressEvent(self, event):
self.my_signal.emit(42)
class MyMainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent=parent)
# 创建 MyWidget 对象
self.my_widget = MyWidget()
# 将 MyWidget 对象的信号连接到 MyMainWindow 对象的槽函数上
self.my_widget.my_signal.connect(self.handle_my_signal)
# 将 MyWidget 对象添加到主窗口中
self.setCentralWidget(self.my_widget)
def handle_my_signal(self, value):
print(f'Received signal with value {value}')
if __name__ == '__main__':
app = QApplication([])
# 创建 MyMainWindow 对象
main_window = MyMainWindow()
# 显示窗口
main_window.show()
# 运行应用程序
app.exec_()
在这个例子中,我们定义了两个不同的类,分别是 MyWidget 和 MyMainWindow。其中,MyWidget 类继承自 QPushButton,并定义了一个自定义信号 my_signal。在 MyWidget 类中,当鼠标按下时,我们发射了 my_signal 信号,并传递了一个整数参数。
在 MyMainWindow 类中,我们创建了一个 MyWidget 对象,并将它添加到主窗口中。我们使用 my_widget.my_signal.connect 语句将 MyWidget 对象的 my_signal 信号连接到 MyMainWindow 对象的 handle_my_signal 槽函数上。当 my_signal 信号被发射时,handle_my_signal 槽函数会被调用,输出传递的整数参数。
需要注意的是,在两个不同的类之间连接信号和槽时,需要确保信号和槽的名称、参数类型以及参数个数都是一致的。同时,需要将发射信号的对象和接收信号的对象正确地传递给 connect 函数。