QSignalMapper 类用来接受多个信号,将信号汇总后再发射一个新信号。
用处主要是使多个执行类似功能的槽函数化简为一个;
QSignalMapper
类在 PyQt 中已经被废弃,并且在较新版本的 PyQt 中已经不存在这个类。
在 PyQt 中,我们可以使用 QSignal
的参数传递机制或者使用 lambda
函数来实现 QSignalMapper
的功能。
以下是一个使用 lambda
函数的例子,它模拟了 QSignalMapper
的功能:
from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import QObject, pyqtSlot
class 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()