概述
——学习《PyQt5快速开发与实战》的笔记
0.信号与槽机制的特点:
1.1 signal、slot都继承自 QtCore
1.2 signal与slot 可以 1对1,1对n,n对1,n对n
1.3 signal可以带参数,参数可以是python任意类型,str,num(intfloat),bool,date,list,dict,tuple)
1.4 QObject.signal.connect(slot),连接
1.5 signal和slot可以是同步,也可以是异步(不懂)
1.6 可以跨线程
1.7 有可能会断开
核心使用语句:
控件:信号需要跟控件绑定
signal:有内置和自定义两种方式
操作方法:connect、disconnect、emit
slot:有内置和自定义两种方式
1.控件绑定信号
from PyQt5.QtCore importpyqtSignalfrom PyQt5.QtWidgets importQMainWindowclasswindow(QMainWindow):#直接在控件里面写一个信号变量,是类的全局变量
btnClicked = pyqtSignal() #无参数信号
2、操作信号的方法
QObject.signal.connect(slot[, type=PyQt5.QtCore.QtAutoConnection[,no_reviver_check=False]])#slot - 要连接的那个槽函数,或者是另外一个信号
#type - 连接的类型,这个一时半会还用不到,
#no_revicer_check - 不让底层的C++接收器实例保持存在并且传递信号,默认状态是False,那就是要保持存在并且传递信号
QObject.signal.disconnect(slot)#slot - 要断开连接的槽函数
QObject.signal.emit(*args)#*args 可变参数,什么类型可以接受
3、入门案例
三种方式:
3.1 内置信号与槽
3.2 自定义信号与槽
3.3 装饰器信号与槽(1的衍生,先不管)
3.1 内置信号与槽
#3.1 内置信号和槽的使用
from PyQt5.QtWidgets importQPushButton, QApplication,QWidgetfrom PyQt5.QtWidgets importQMessageBoximportsys
app=QApplication([])
widget=QWidget()defshowmsg():
QMessageBox.information(widget,'信号提示框','OK,弹出测试信息')if __name__ == '__main__':
btn= QPushButton('测试点击按钮',widget)
btn.clicked.connect(showmsg)#clicked 内置信号方法 showmsg 槽函数名称,作为索引
widget.show()
sys.exit(app.exec_())
3.2 自定义信号与槽的使用
#3.2 自定义信号与槽的使用
from PyQt5.QtCore importQObject, pyqtSignal#自定义的信号对象
classQ_type_signal( QObject):#定义信号
sendmsg =pyqtSignal(object)def __init__(self):
super(Q_type_signal, self).__init__()defrun(self,send_msg):#发射信号
self.sendmsg.emit(send_msg)#send_msg 就是下面槽函数 get() 接受的 msg变量
classQ_type_slot( QObject):def __init__(self):
super(Q_type_slot, self).__init__()defget(self,msg):print('QSlot get msg:'+msg)if __name__ == '__main__':
send=Q_type_signal()
slot=Q_type_slot()
send.sendmsg.connect(slot.get)
send.run('hahaha')
动作分解:
执行结果:
上面执行的是带有一个参数的信号传递,两个信号也是一样,只需要添加变量即可:
defrun(self,send_msg,send_int):#发射信号
self.sendmsg.emit(send_msg, send_int)defget(self,msg,int):print('QSlot get msg:'+ msg + int)
3.3 自定义信号与自定义槽
from PyQt5.QtWidgets import *
from PyQt5.QtCore importpyqtSignalimportsysclassWinform(QWidget):#自定义信号,不带参数
btn_clicked_signal =pyqtSignal()def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('自定义信号/内置槽示例')
self.resize(200, 50)
btn= QPushButton('关闭', self)#连接信号与槽1
btn.clicked.connect(self.btn_clicked)#接收信号,连接到自定义槽函数
#self.btn_clicked_signal.connect(self.close)
self.btn_clicked_signal.connect(self.btn_close)defbtn_clicked(self):#自定义信号发送,无参数
self.btn_clicked_signal.emit()defbtn_close(self):#自定义槽函数
self.close()if __name__ == '__main__':
app=QApplication(sys.argv)
win=Winform()
win.show()
sys.exit(app.exec_())
自定义的信号:btn_clicked_signal,需要调用btn_clicked()发送信号
自定义的槽:btn_close,内部实际上调用了内置槽函数close()
说实话,这个案例很容易让人混淆 内置和自定义,无论是信号还是槽。
最后
以上就是风中飞机为你收集整理的python槽怎么用_【PyQt5】信号与槽用法入门的全部内容,希望文章能够帮你解决python槽怎么用_【PyQt5】信号与槽用法入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复