• 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_())
    复制代码

     

  • 相关阅读:
    Python爬虫简介
    JAVA:实现Pow函数功能算法(附完整源码)
    Windows环境下使用python安装PyCrypto模块的方法
    Cannot run program “D:\c\IntelliJ IDEA 2021.1.3\jbr\bin\java.exe“
    Vue Router
    LLM - 大模型速递 InternLM-20B 快速入门
    嵌入式开发:用DSP软件替代模拟组件的5大好处
    Spring核心系列——多yaml数据读取,@Value day1-1
    【前端面试】初中高级前端面试指南 - CSS 篇(3)
    三维重建之PIFuHD
  • 原文地址:https://www.cnblogs.com/lihongtaoya/p/18194507