PyQt5 笔记(05):信号/槽

简介: PyQt 的很多类都内置了信号和槽。下图是 Qt 官方文档对 QThread 类中包含的信号/槽的描述:       一、信号/槽 都是内置的 请看一个最简单的程序: 按钮点击后,窗口关闭                 代码: class Test(QDialog)...

 

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

 

目录
相关文章
|
4月前
|
Python
python tkinter 实现简易秒表计时器
python tkinter 实现简易秒表计时器
127 1
|
4月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
27 0
|
5月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
112 0
|
前端开发 数据可视化 搜索推荐
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
【100天精通python】Day37:GUI界面编程_PyQt 从入门到实战(上)_PyQt6基本组件、事件和信号槽、界面设计
504 1
|
7月前
|
Python
PyQt学习------PyQt自定义信号
PyQt学习------PyQt自定义信号
80 0
|
7月前
PyQt5信号创建及发送
PyQt5信号创建及发送
57 0
|
算法
labview信号时域分析编程笔记
labview信号时域分析编程笔记
156 0
|
缓存 C++
Qt | 串口通信 QSerialPort
使用QSerialPort实现串口通信功能。
653 0
使用qt实现简易示波器功能
使用qt实现简易示波器功能
1010 1