首页 > 作文

PyQt5信号与槽机制案例详解

更新时间:2023-04-06 02:43:48 阅读: 评论:0

信号和槽机制是 qt 的核心机制,要精通 qt 编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是 qt 的核心特性,也是 qt 区别于其它工具包的重要地方。

信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,信号会被发射出来,槽调用是用来响应相应的信号的。qt中对象已经包含了许多预定义的信号(基本组件都有各自特有的预定义的信号),根据使用的场景也可以添加新的信号。同样qt的对象中已经包含了许多预定义的槽函数,但也可以根据使用的场景添加新的槽函数。

一、概念简介

所有继承qwidget的控件都支持信号与槽机制。

信号:当一个信号发生改变时,向外界发出的信息。

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

槽:一个执行某些操作的函数或者方法。

当和槽连接的信号被发射时,槽会被调用。一个槽并不知道是否有任何信号与自己相连接。

信号与槽机制:主要分两种

手动操作:信号连接槽

自动操作:当信号发出时,连续的槽函数会自动执行

信号连接

通过调用 qobject 对象的 connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下:

当信号与槽没有必要继续保持关联时,可以使用 disconnect 函数来断开连接。其定义如下:

信号和槽的特点:

1.一个信号可以连接到多个槽:当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。

2.多个信号可以连接到同一个槽:其中任何一个信号发出,槽函数都会被执行。

3.信号的参数可以是任何的python类型,如list,dict等python独有的类型。自定义信号的时候举例说明。

4.信号和槽的连接可以被移除:比如断开某个特定信号的关联。

5.信号可以和另外一个信号进行关联:第一个信号发出后,第二个信号也同时发送。比如关闭系统的信号发出之后,同时会发出保存数据的信号。

二、代码样例

整体代码如下:

控件说明:

控件类型控件名称作用controlsgroupqgroupbox为构建分组框提供了支持。分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。lcdnumberqlcdnumber用于显示一个带有类似液晶显示屏效果的数字。sliderqslider提供一个垂直或者水平的滑动条,滑动条是一个用于控制有界值典型的控件,它允许用户沿水平或者垂直方向在某一范围内移动滑块,并将滑块所在的位置转换为一个合法范围内的整数值pbarqprogressbar提供了一个水平或垂直的进度条label1qlabel占位符显示文本显示图片放置gif动画超链接提示标记buttonsaveqpushbutton常用的按钮控件

界面说明:

程序样本运行的界面逻辑,先设定运行的程序样本数量,然后先保存后运行的逻辑状态。通过slider的滑动来改变progressbar和lcd的显示数据;“保存”按钮保存运行的样本;“运行”按钮运行程序样本;“解除关联”解除slider.valuechan文凭等级ged信号的绑定,此时slider的滑动,不会改变progressbar和lcd的显示。

实例化一个qgroupbox,在其中添加qprogressbar、qlcdnumber、qslider控件。

通过qgridlayout()添加标签以及按钮。

最后通过qhboxlayout将左右两个界面合并,形成最终界面。

信号与槽说明:

signal和slot进行绑定。
1.一个信号绑定多个槽:

slider控件的valuechanged信号,同时与qprogressbar的tvalue(),qlcdnumber的display()槽函数绑定,当valuechanged信号触发的时候,这两个槽函数均会被调用。

2.多个信号绑定到一个槽:

调档线是什么意思

buttonsave和buttonrun这两个对象的clicked信号,同时绑定到showmessage()这个槽函数。无论哪一个信号被触发,showmessa街舞考级一共几级ge()这个槽函数均会被调用,而根据lf.nder().text() 这个函数来判断显示的不同内容。

3.信号和槽的连接可以被移除:

当buttondisconnect信号触发之后,与其关联的槽函数unbindconnection()中就会执行disconnect()方法,如下:

其中执行disconnect()的时候可以指定解除与某个特定的slot槽的关联,比如lf.slider.valuechanged.disconn减肥药有什么副作用ect(lf.pbar.tvalue),此时解除和qprogressbar的tvalue()的关联,如果不指定,将解除和这个信号所有关联的槽。

4、信号与信号的关联:

在样例说明中提到,在运行之前要对样本进行保存,所以为了保证运行的时候执行了保存的操作,所以将buttonrun.clicked信号和buttonsave.clicked信号关联起来。

示例中在没有执行“保存”(buttonsave)的时候,执行“运行”(buttonrun),此时由于两个对象的clicked信号已经关联,所以buttonsave的clicked同样会执行。

最终结果:

本文是《从零开始学pyqt5》第五篇,希望小伙伴们可以多多支持,一起学习!

参考:

pyqt5系列(七)-信号与槽机制_追逐阳光的风-csdn一尺是几米博客_pyqt5信号和槽

到此这篇关于pyqt5信号与槽机制案例详解的文章就介绍到这了,更多相关pyqt5信号与槽机制内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-06 02:43:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/646a3192c49b8d09639ccd33af9dfdac.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PyQt5信号与槽机制案例详解.doc

本文 PDF 下载地址:PyQt5信号与槽机制案例详解.pdf

下一篇:返回列表
标签:信号   函数   对象   控件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图