高手进阶之路---pyqt自定义信号

高手进阶之路---pyqt自定义信号

1.思考问题为什么要自定义信号,qt5本身已有信号槽函数

python 复制代码
# pushButton 被clicked的时候connect 函数print
self.pushButton.clicked.connect(self.print)

def print(self):
	print("我被点击了")

或者使用

python 复制代码
# 需要引入 pyqtSlot 库函数
from PyQt5.QtCore import pyqtSlot

@pyqtSlot() #装饰器,此函数没有connect直接通过装饰器初始化连接槽函数
# 使用此装饰器,需要规定函数命名方式:on_qt部件_clicked(self)
def on_pushButton_clicked(self):
	print("我点击了")

看上去确实很简单,但是我们在编写比较耗时的程序的时候,就会发现我们点击了控件我们的UI界面卡死了,直到主程序运行完成,这是因为我们的主程序在运行我们的代码,不能在去执行其他的操作导致的,所以我们就要使用了多线程,多线程就需要我们自定义信号和槽函数,方法如下:

python 复制代码
from PyQt5.QtCore import pyqtSignal, QObject


class Signal(QObject):
    # 实例化pyqtSignal,声明一个信号signal
    signal = pyqtSignal(str)  # 这里可以是str,list,int

    def __init__(self):
        super().__init__()

    def connect_signal(self):
        # 将信号连接到指定的槽函数call_signal
        self.signal.connect(self.call_signal)
        # 将信号断开连接到指定的槽函数call_signal
        self.signal.disconnect(self.call_signal)
        # 使用emit发射信号
        self.signal.emit('你好啊')

    def call_signal(self, msg):
        """接收emit发送的数据的函数"""
        print('槽函数信息', msg)


if __name__ == '__main__':
    ui= Signal()
    ui.connect_signal()
相关推荐
look ahead to4 小时前
关于PYQT qt designer的网格布局 单控件占多行的处理
开发语言·qt·pyqt
深蓝海拓8 小时前
PyQt5/PySide6的moveToThread:移动到线程
笔记·python·qt·学习·pyqt
@fai11 小时前
[特殊字符] 在 PyQt6 中实现 Photoshop 风格的“橡皮擦”光标:高性能、不随缩放变形、精准跟随鼠标
图像处理·python·pyqt·photoshop
玖疯子1 天前
TCP/IP协议栈深度解析技术文章大纲
python·scikit-learn·pyqt·pygame
大学生毕业题目5 天前
毕业项目推荐:105-基于yolov8/yolov5/yolo11的烟草等级检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·烟草等级
大学生毕业题目5 天前
毕业项目推荐:103-基于yolov8/yolov5/yolo11的皮肤癌检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·皮肤癌检测
大学生毕业题目7 天前
毕业项目推荐:102-基于yolov8/yolov5/yolo11的行人车辆检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·行人车辆检测
大学生毕业题目8 天前
毕业项目推荐:99-基于yolov8/yolov5/yolo11的肾结石检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·肾结石检测
深蓝海拓8 天前
PySide6,QEventLoop.exec()的使用
笔记·python·qt·学习·pyqt