PyQt 模拟实现QSignalMapper 实现多个按钮点击监控

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()

 

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值