zoukankan      html  css  js  c++  java
  • 信号与槽-入门应用

    信号(signal)和槽(slot)是Qt的核心机制。在创建事件循环之后,通过建立信号和槽的连接就可以实现对象之间的通信。当信号发射(emit)时,连接的槽函数将会自动执行。在PyQt5中,信号和槽通过QObject.signal.connect()连接。

    所有从QObject类或其子类(如QWidget)派生的类都能够包含信号和 槽。当对象改变其状态时,信号就由该对象发射出去。槽由于接收信号,但它们是普通的对象成员函数。多个信号可以与单个槽进行连接,单个信号也可以与多个槽进行连接。总之,信号和槽构建了一种强大的控件编程机制。

    在Qt编程中,通过Qt信号槽机制对鼠标或键盘在界面上的操作进行响应处理,例如对鼠标单击按钮的处理。对控件发射的信号指定对应的处理槽函数的方法:第一,在窗口的UI设计中操作添加信号和槽;第二,通过代码连接信号和槽;第三种,通过Eric的“生成对话框代码”的功能产生信号和槽。

     1. 内置信号和槽函数

    from PyQt5.QtWidgets import *
    import sys
    
    
    class WinForm(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("内置的信号/槽示例")
            self.resize(330, 50)
            btn = QPushButton("关闭", self)
            btn.clicked.connect(self.close)
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = WinForm()
        win.show()
        sys.exit(app.exec_())

    2. 内置信号和自定义槽函数

    from PyQt5.QtWidgets import *
    import sys
    
    
    class WinForm(QWidget):
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("内置的信号和自定义槽函数示例")
            self.resize(330, 50)
            btn = QPushButton("关闭", self)
            btn.clicked.connect(self.btn_close)
    
        def btn_close(self):
            self.close()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = WinForm()
        win.show()
        sys.exit(app.exec_())

    3. 自定义信号和内置槽函数

    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import pyqtSignal
    import sys
    
    
    class WinForm(QWidget):
        # 自定义信号,不带参数
        button_clicked_signal = pyqtSignal()
    
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("自定义信号和槽函数示例")
            self.resize(330, 50)
            btn = QPushButton("关闭", self)
            # 连接信号与槽函数
            btn.clicked.connect(self.btn_clicked)
            # 接收信号,连接到槽函数
            self.button_clicked_signal.connect(self.close)
    
        def btn_clicked(self):
            # 发送自定义信号,无参数
            self.button_clicked_signal.emit()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = WinForm()
        win.show()
        sys.exit(app.exec_())

    4. 自定义信号和槽函数

    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import pyqtSignal
    import sys
    
    
    class WinForm(QWidget):
        # 自定义信号,不带参数
        button_clicked_signal = pyqtSignal()
    
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setWindowTitle("自定义信号和槽函数示例")
            self.resize(330, 50)
            btn = QPushButton("关闭", self)
            # 连接信号与槽函数
            btn.clicked.connect(self.btn_clicked)
            # 接收信号,连接到自定义的槽函数
            self.button_clicked_signal.connect(self.btn_close)
    
        def btn_clicked(self):
            # 发送自定义信号,无参数
            self.button_clicked_signal.emit()
    
        def btn_close(self):
            self.close()
    
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        win = WinForm()
        win.show()
        sys.exit(app.exec_())
  • 相关阅读:
    使用Python创建自己的Instagram滤镜
    TensorFlow v2.0实现逻辑斯谛回归
    自动驾驶研究回顾:CVPR 2019摘要
    dp cf 20190613
    简单搜索 kuangbin C D
    树形dp compare E
    区间dp E
    Codeforces Round #564 (Div. 2)
    网络流 + 欧拉回路 = B
    网络流 A
  • 原文地址:https://www.cnblogs.com/lynsha/p/13468695.html
Copyright © 2011-2022 走看看