PyQt5信号与槽的简单使用记录

171 阅读2分钟

前言

最近开发项目,使用PyQt5,已经熟悉Qt设计界面,然后简单的使用python调用编写,学习了一些知识,简单记录一下!


信号与槽

使用Qt设计好界面,再通过PyUic转化成py,就可以通过其他python来调用设计好的界面控件。在调用界面控件时,我们使用到connect连接,也就是常用的信号与槽。

具体使用

举个例子: 我前端设计采用了一个pushbuttom按钮。

按钮有对应的Click事件,那这个点击事件要如何和后台沟通呢?那么就需要连接connnect。这个连接的处理方式有好几种。我简单介绍一下我从最初的使用到优化后的使用,再介绍一下使用背景。我定义了很多按钮,其功能差不多,需要组包的协议只有一个位不同。

  • 定义Click事件,也就是对应的函数;
def btn_click(self):
	pass
  • 使用connect连接起来。
self._ui.xx.clicked.connect(self.btn_click)
  • _ui是我们设计的界面,我们可以命名为_ui使用。
  • xx就是这个界面里的控件。
  • clicked可以是这个控件对应的事件。 通过以上的方式,我们就完成了一个简单的信号与槽的绑定,那么为了完成我需要的功能,我需要定义很多个槽函数,然后对信号一一匹配。。 于是乎,可能就会出现一个按钮对应一个槽函数。其实一个槽可以对应多个信号,一个信号也可以对应多个槽。也就是我们的多个按钮,相当于多个信号,使用同一个槽函数。 我们可以做出如下更改:
self._ui.xx.clicked.connect(lambda:self.btn_click(yy))
self._ui.xx1.clicked.connect(lambda:self.btn_click(yy1))
self._ui.xx2.clicked.connect(lambda:self.btn_click(yy2))

我们在这里区分不同的信号,就是在给它增加一个区分,添加一个变量yy,这个变量根据我按钮的不同来变化。这样我们只需要多建立几个连接,就可以减少我们写很多槽函数。

def btn_click(self,yy):
	pass

这里的yy就可以知道是什么按钮按下的,来进行不同的操作,这样我们避免出现定义重复的函数,尤其当很多按钮按下的事件处理相同,仅有一个数据不同时,这种方式可以减少很多的代码量,优化了代码!


总结

本文记录了在使用connect信号与槽的两种方式。