QSignalMapper 类用来接受多个信号,将信号汇总后再发射一个新信号。
用处主要是使多个执行类似功能的槽函数化简为一个;
QSignalMapper
类在 PyQt 中已经被废弃,并且在较新版本的 PyQt 中已经不存在这个类。
在 PyQt 中,我们可以使用 QSignal
的参数传递机制或者使用 lambda
函数来实现 QSignalMapper
的功能。
以下是一个使用 lambda
函数的例子,它模拟了 QSignalMapper
的功能:
from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import QObject, pyqtSlotclass SignalMapper(QObject):def __init__(self, parent=None):super(SignalMapper, self).__init__(parent)@pyqtSlot(QPushButton)def mapSignal(self, button):print(f"Button {button.text()} was clicked!")def main():app = QApplication([])window = QWidget()layout = QVBoxLayout()signal_mapper = SignalMapper()buttons = [QPushButton(f"Button {i}") for i in range(5)]for button in buttons:button.clicked.connect(lambda checked, button=button: signal_mapper.mapSignal(button))for button in buttons:layout.addWidget(button)window.setLayout(layout)window.show()app.exec_()if __name__ == "__main__":main()