Pyqt中控件,信号与槽详解及实操场景笔记

Pyqt中控件,信号与槽详解及实操场景笔记

一、信号signal:
当对象的状态发生改变的时候,信号就由该对象发射 (emit) 出去。当一个信号被发射(emit)时候,与其关联的槽函数被立刻执行。其中该对象只负责发送信号,发射该信号的对象并不知道是那个对象在接收这个信号。这样保证了对象与对象之间的低耦合。
如果存在信号和多个槽函数相关联的时候,当信号被发射时,这些槽的执行顺序将会是随机的、不确定的。

二、槽Slot:
用于接受信号,而且槽只是普通的对象成员函数。当和槽连接的信号被发射时,槽会被调用。一个槽并不知道是否有任何信号与自己相连接。

三、信号和[槽、信号]的绑定:
通过调用 QObject 对象的 connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。
信号-槽机制具有以下特点:
1)一个信号可以与多个槽连接;
2)一个信号可以与其他信号连接;
3)信号的参数可以是任意类型;
4)一个槽可以连接多个信号;
5)信号与槽的连接可以断开;
6) 连接可以是同步的也可以是异步的;
7)连接是可以跨线程的。

  1. 使用PyQt Designer完成界面设计,编辑信号/槽,通过拖动创建。
  2. 在二次封装对象,def init()中,通过代码实现
    Self.ObjectName.Signal.connect(Slot)
    常用Signal:clicked、pressed、toggled、release
    常用 Slot:close()、show()、hide()
  3. 多个控件,绑定一个槽。场景,计算器多个按钮控件,可通过代码;连接槽函数,没必要在PyQt Designer中通过多次拖放连接。
for child in self.children():
	if child.inherits(“PushButton”):  # PushButton 可以是改为自定义的类。
 		child.clicked.connect(lambda: print(“被单击了”))
  1. 先期不做连接操作,在定义槽时通过装饰器实现连接,后面在讲。

四、信号与槽的断开
PyQt5提供了disconnect方法来进行解绑
self.pushButton.clicked.disconnect(slot)

五、自定义信号、信号的发射
作用:给外界传送信号及数据
自定义信号只能在QObject的子类中定义,用pyqtSignal()函数创建一个未绑定的信号作为类的属性
#声明无参数的信号
signal1 = pyqtSignal()
#声明带一个int类型参数的信号
signal2 = pyqtSignal(int)
#声明带int和str类型参数的信号
signal3 = pyqtSignal(int,str)
#声明带一个列表类型参数的信号
signal4 = pyqtSignal(list)
#声明带一个字典类型参数的信号
signal5 = pyqtSignal(dict)
#声明一个多重载版本的信号,包括带int和str类型参数的信号和带str类型参数的信号
signal6 = pyqtSignal([int,str], [str])

发送信号,可以带多个参数给外界
self. signal6.emit(‘Hello PyQt5’)

六、自定义槽
普通的槽函数就是一个自定义函数,需要注意的,信号发射了几个参数,对应的槽函数应有对应的参数接收。
通过装饰器的方法来定义槽函数,无需手动定义信号与槽的连接。
注意:使用这种方法的有效前提是下面的函数已经执行:
QMetaObject.connectSlotsByName(QObject)
PyQt Designer 生成的ui文件自动有这条语句。

   @PyQt5.QtCore.pyqtSlot(参数)
       def on_发送者对象名称_发射信号名称(self, 参数):
             pass

pyqtSlot(参数)→参数为 int,str,类名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值