高手进阶之路—pyqt自定义信号
1.思考问题为什么要自定义信号,qt5本身已有信号槽函数
# pushButton 被clicked的时候connect 函数print
self.pushButton.clicked.connect(self.print)
def print(self):
print("我被点击了")
或者使用
# 需要引入 pyqtSlot 库函数
from PyQt5.QtCore import pyqtSlot
@pyqtSlot() #装饰器,此函数没有connect直接通过装饰器初始化连接槽函数
# 使用此装饰器,需要规定函数命名方式:on_qt部件_clicked(self)
def on_pushButton_clicked(self):
print("我点击了")
看上去确实很简单,但是我们在编写比较耗时的程序的时候,就会发现我们点击了控件我们的UI界面卡死了,直到主程序运行完成,这是因为我们的主程序在运行我们的代码,不能在去执行其他的操作导致的,所以我们就要使用了多线程,多线程就需要我们自定义信号和槽函数,方法如下:
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()