高手进阶之路---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()
相关推荐
深蓝海拓1 天前
PySide6从0开始学习的笔记(二) 控件(Widget)之容器类控件
笔记·qt·学习·pyqt
叶子丶苏2 天前
第十七节_PySide6基本窗口控件深度补充_窗口绘图类(QPicture类) 下篇
python·pyqt
深蓝海拓2 天前
PySide6从0开始学习的笔记(六) 控件(Widget)之按钮类
笔记·python·qt·学习·pyqt
深蓝海拓2 天前
PySide6从0开始学习的笔记(七) 控件(Widget)之文字输入类控件
笔记·python·qt·学习·pyqt
python开发笔记2 天前
PyQt(12)TreeWidget与TreeView对比
pyqt
Java Fans2 天前
PyQt多页面切换教程
pyqt
深蓝海拓3 天前
PySide6从0开始学习的笔记(五) 信号与槽
笔记·qt·学习·pyqt
深蓝海拓4 天前
PySide6从0开始学习的笔记(四)QMainWindow
笔记·python·学习·pyqt
深蓝海拓4 天前
PySide6 的 QSettings简单应用学习笔记
python·学习·pyqt
深蓝海拓4 天前
PySide6从0开始学习的笔记(三) 布局管理器与尺寸策略
笔记·python·qt·学习·pyqt