我是靠谱客的博主 风中飞机,最近开发中收集的这篇文章主要介绍python槽怎么用_【PyQt5】信号与槽用法入门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

——学习《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】信号与槽用法入门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部