• PyQt5自定义信号


    一.简介

    在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为。自定义信号需要继承自QObject,pyqtSignal并定义其参数类型。

    二.操作步骤

    1.导入必要的模块

    from PyQt5.QtCore import QObject, pyqtSignal

    2.创建自定义信号

    1)继承自 QObject

    2)定义信号参数的类型

    复制代码
    class MyCustomObject(QObject):  
        # 定义一个没有参数的信号  
        signal_without_params = pyqtSignal()  
          
        # 定义一个带有字符串参数的信号  
        signal_with_string_param = pyqtSignal(str)
    复制代码

    3.在类中触发信号

    复制代码
    class MyCustomObject(QObject):  
        # ... 信号定义 ...  
          
        def some_method(self, message):  
            # 做一些事情...  
            # 然后触发带有字符串参数的信号  
            self.signal_with_string_param.emit(message)
    复制代码

    4.连接信号(Singnals)到槽(Slots)

    复制代码
    # 假设你有一个 MyCustomObject 的实例  
    my_obj = MyCustomObject()  
      
    # 连接信号到槽  
    def handle_signal(message):  
        print(f"Received message: {message}")  
      
    my_obj.signal_with_string_param.connect(handle_signal)  
      
    # 触发信号  
    my_obj.some_method("Hello, PyQt5!")
    复制代码

    5.pyqt5常用的信号

    下面列举几个常用的信号

    QPushButton.clicked() 当按钮被点击时发出
    QLineEdit.textChanged(str) 当行编辑框中的文本发生变化时发出,并传递新的文本作为参数
    QCheckBox.stateChanged(int) 当复选框的状态发生变化时发出,传递新的状态(Qt.UncheckedQt.Checked, 或 Qt.PartiallyChecked)作为参数
    QSpinBox.valueChanged(int) 当数值框的值发生变化时发出,传递新的值作为参数
    QSlider.valueChanged(int) 当滑块的值发生变化时发出,传递新的值作为参数。
    QComboBox.currentIndexChanged(int) 当下拉列表框的当前索引发生变化时发出,传递新的索引作为参数
    QTimer.timeout() 当定时器超时时发出。
    QMouseEvent 相关的信号:如 mousePressEvent(QMouseEvent)mouseReleaseEvent(QMouseEvent)mouseMoveEvent(QMouseEvent) 等,这些信号在鼠标事件发生时由相应的控件发出。
    QKeyEvent 相关的信号:如 keyPressEvent(QKeyEvent)keyReleaseEvent(QKeyEvent) 等,这些信号在键盘事件发生时由相应的控件发出。
    QCloseEvent 相关的信号:如 closeEvent(QCloseEvent),这个信号在窗口即将关闭时发出。
    action.triggered QAction 是一个代表用户界面动作的对象,比如菜单项、工具栏按钮或快捷键。triggered 是 QAction 的一个信号,当这个动作被触发时(例如,用户点击了对应的菜单项或工具栏按钮),这个信号就会被发出。

    三.实例

    复制代码
    import sys
    from PyQt5.QtCore import QObject, pyqtSignal
    from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
    
    
    # 自定义信号
    class MyCustomObject(QObject):
        # 定义一个没有参数的信号
        signal_without_params = pyqtSignal()
        # 定义一个带有字符串参数的信号
        signal_with_string_param = pyqtSignal(str)
    
        def some_method(self, message):
            self.signal_with_string_param.emit(message)  # 触发
    
    
    class FileChooserApp(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.ql = QLineEdit(self)
            # self.ql.textChanged.connect(self.edit)  # 当QLineEdit框内容发送变化时
            self.ql.move(100, 100)
    
            self.button = QPushButton("确定", self)
            self.my_obj = MyCustomObject()
            self.my_obj.signal_with_string_param.connect(self.edit)  # 自定义信号和槽连接
            self.button.clicked.connect(lambda: self.my_obj.some_method("message"))  # 点击按钮触发自定义信号
            # self.button.clicked.connect(self.my_obj.some_method)  # 点击按钮触发自定义信号(无参时写法)
    
            self.setGeometry(500, 500, 250, 180)
            self.setWindowTitle('textChanged')
    
        def edit(self):
            self.ql.setText("重新输入")
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = FileChooserApp()
        ex.show()
        sys.exit(app.exec_())
    复制代码

     

  • 相关阅读:
    医院信息化、数字医学影像、DICOM、PACS源码
    洛谷P2486 lct做法
    对话系统实战:基于DualEncoder实现对话系统详细教程
    如何区分电脑上的硬件和软件?
    k8s 使用小记:如何进入 k8s 部署的 pod
    安科瑞变电站综合自动化系统在助力变电站实现综合自动化
    Spring Cloud Alibaba 分布式微服务高并发数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案
    【五、接口自动化测试】5分钟掌握python + requests接口测试
    单片机卡死的几大原因、分析、解决
    【Unity3D】资源管理
  • 原文地址:https://www.cnblogs.com/lihongtaoya/p/18194507