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

 

相关推荐

  1. 【CSS节流】实现防止按钮重复

    2024-07-12 22:56:01       63 阅读
  2. 如何实现vue按钮进行图片浏览 ?

    2024-07-12 22:56:01       114 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 22:56:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 22:56:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 22:56:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 22:56:01       69 阅读

热门阅读

  1. linux的CUDA、torch和驱动GPU驱动的对应问题

    2024-07-12 22:56:01       19 阅读
  2. 递归函数遍历格式化字典

    2024-07-12 22:56:01       21 阅读
  3. 【LeetCode】2089. 找出数组排序后的目标下标

    2024-07-12 22:56:01       21 阅读
  4. 简谈设计模式之单例模式

    2024-07-12 22:56:01       19 阅读
  5. Linux文件系统

    2024-07-12 22:56:01       17 阅读
  6. 进程的阻塞

    2024-07-12 22:56:01       24 阅读
  7. 连接docker私有仓库

    2024-07-12 22:56:01       21 阅读
  8. React中的useCallback

    2024-07-12 22:56:01       19 阅读
  9. 【力扣C语言】每日一题—第50题,Pow(x,n)

    2024-07-12 22:56:01       22 阅读