zoukankan      html  css  js  c++  java
  • PyQt5 笔记(05):信号/槽

    PyQt 的很多类都内置了信号和槽。下图是 Qt 官方文档对 QThread 类中包含的信号/槽的描述:

    一、信号/槽 都是内置的

    请看一个最简单的程序: 按钮点击后,窗口关闭

                   

    代码:

    class Test(QDialog):
        def __init__(self, parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            
            btn.clicked.connect(self.close) #
    

    对语句①的说明:

          信号 ==> 槽
      信号(btn.clicked)、槽(self.close)都是内置
      作用:按钮点击后,窗口关闭

    完整代码:

    from PyQt5.QtWidgets import *
    import sys
    
    class Test(QDialog):
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            
            btn.clicked.connect(self.close) 
            
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        dlg = Test()
        dlg.show()
        sys.exit(app.exec_())
    View Code

    二、信号内置、槽自定义

    功能同上。

    class Test(QDialog):
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            
            btn.clicked.connect(self.my_close) #
            
            
        def my_close(self): # ② 自定义槽
            self.close()
    

    对语句的说明:

          信号 ==> 槽
      信号(btn.clicked)是内置的、槽(self.my_close)是自定义
      作用:按钮点击后,窗口关闭

    完整代码:

    from PyQt5.QtWidgets import *
    import sys
    
    class Test(QDialog):
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            
            btn.clicked.connect(self.my_func) 
            
            
        def my_func(self):
            self.close()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        dlg = Test()
        dlg.show()
        sys.exit(app.exec_())
    View Code

    三、信号是自定义的,槽是内置的

    class Test(QDialog):
    
        button_clicked_signal = pyqtSignal() # 自定义信号,不带参
        
        def __init__(self,parent=None):
            super().__init__(parent)
    
            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() # ②发送自定义信号,无参
    

    对语句③的说明:

          信号 ==> 槽
      信号(button_clicked_signal)是自定义的、槽(self.close)是内置
      作用:按钮点击后,窗口关闭

    附图说明一下执行顺序:

    完整代码:

    from PyQt5.QtWidgets import *
    import sys
    
    class Test(QDialog):
    
        button_clicked_signal = pyqtSignal() # 自定义信号,不带参
        
        def __init__(self,parent=None):
            super().__init__(parent)
    
            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)
        dlg = Test()
        dlg.show()
        sys.exit(app.exec_())
    View Code

    四、信号/槽 都是自定义的

    class Test(QDialog):
    
        button_clicked_signal = pyqtSignal() # 自定义信号,不带参
        
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            btn.clicked.connect(self.btn_clicked) # 信号/槽
            
            self.button_clicked_signal.connect(self.my_close) # 接收信号,连接到槽
            
            
        def btn_clicked(self):
            self.button_clicked_signal.emit() # 发送自定义信号,无参
            
        def my_close(self):
            self.close()
    

    完整代码:

    from PyQt5.QtWidgets import *
    import sys
    
    class Test(QDialog):
    
        button_clicked_signal = pyqtSignal() # 自定义信号,不带参
        
        def __init__(self,parent=None):
            super().__init__(parent)
    
            btn = QPushButton('关闭', self)
            btn.clicked.connect(self.btn_clicked) # 信号/槽
            
            self.button_clicked_signal.connect(self.my_close) # 接收信号,连接到槽
            
            
        def btn_clicked(self):
            self.button_clicked_signal.emit() # 发送自定义信号,无参
            
        def my_close(self):
            self.close()
    
            
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        dlg = Test()
        dlg.show()
        sys.exit(app.exec_())
        
    View Code
  • 相关阅读:
    juc原子类之五:AtomicLongFieldUpdater原子类
    DICOM:C-GET与C-MOVE对照剖析
    android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题
    TRIZ系列-创新原理-32-改变颜色原理
    FP-Growth算法之频繁项集的挖掘(python)
    个人年终总结
    J2EE之ANT
    log4net 使用与配置 每天一份log文件
    Android 完美实现图片圆角和圆形(对实现进行分析)
    Unity3d修炼之路:载入一个预制体,然后为该对象加入组件,然后查找对象,得到组件。
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5176068.html
Copyright © 2011-2022 走看看