PyQt5 笔记3 – 信号与槽(signals and slots)


学习资料:
PyQt5 教程
PyQt5 官方文档


1、信号与槽

QT所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调用应用的exec()方法时,应用会进入主循环,主循环会监听和分发事件。

在事件模型中,有三个角色:事件源、事件、事件目标

事件源就是发生了状态改变的对象。事件是这个对象状态的改变的内容。事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。

PyQt5 处理事件方面采用 signal and slot 机制。Signals and slots 用于对象间的通讯。事件触发的时候,emit 一个 signal,对应的 slot 被调用来响应相应的signal。


2、信号和槽的绑定与解绑

# 信号和槽的绑定,槽函数不用加 ()
self.事件源.事件.connect(self.槽函数)
# 例:
self.buttonOn.clicked.connect(self.showMessage)
self.buttonOff.clicked.connect(self.showMessage)# 信号和槽的解绑
self.事件源.事件.disconnect(槽函数)
# 例:
self.buttonOn.clicked.disconnect(self.showMessage)
self.buttonOff.clicked.disconnect(self.showMessage)

3、重构事件处理器

在PyQt5中,经常需要重写事件处理器(覆盖库自带的)。

# 重构键盘按下事件def keyPressEvent(self, e):if e.key() == Qt.Key_Escape:self.close()

4、自定义信号

正常是在自己的窗口类中定义和使用。也可以先自定义一个继承自 QObject 类,然后在类中自定义信号(需要定义在 init 函数之外)。

# 自定义一个信号
self.mySignal = pyqtSignal()# 绑定信号
self.mySignal.connect(self.mySlot)# 发出信号
self.mySignal.emit()

5、信号与槽demo

LCD的值随着滑动条滑动而改变

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication)class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 创建 QLCDNumber 和 QSliderlcd = QLCDNumber(self)sld = QSlider(Qt.Horizontal, self)# 垂直布局vbox = QVBoxLayout()vbox.addWidget(lcd)vbox.addWidget(sld)#把 vbox 应用到总布局self.setLayout(vbox)# 信号与槽绑定sld.valueChanged.connect(lcd.display)# 设置 QWidget 参数self.setGeometry(300, 300, 250, 150)self.setWindowTitle('Signal and slot')self.show()if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

PyQt5 笔记3 -- 信号与槽相关推荐

  1. PyQt5 随笔:信号与槽的两种使用方法:@pyqtSlot() 和 connect()

    PyQt5 随笔:信号与槽的两种连接方法:@pyqtSlot() 和 connect() 1. @pyqtSlot() @pyqtSlot()有两种使用情况.如下面两个例子. 例子1:一个信号时,如p ...

  2. (3)pyqt5教程--->信号与槽初试

    GitHub连接: 本专栏所有源代码的GitHub直通车 上一篇已经讲了如何使用QTdesigner生成ui文件并转化为py文件,最终实现界面代码分离的效果 信号与槽作是 QT 的核心机制,是一种高级 ...

  3. Qt工作笔记-使用信号与槽让两个界面进行数据通信

    今天在项目中,发现有一个十分重要的功能,就是2个界面进行数据通信. 记得1年多前,刚刚学习Qt,对这个无法理解,然后经过一年多的学习和理解,在此把自己学习的感悟和知识在此总结下. 下面是使用emit ...

  4. Qt工作笔记-通过信号与槽实现定时器

    程序运行截图如下: 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { cla ...

  5. Qt工作笔记-对信号与槽的进一步理解(信号与信号关联)

    运行截图如下: 关键代码如下: connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked()));connect(thi ...

  6. PyQt5(五)信号与槽机制

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

  7. PyQt5 笔记7 -- 多个类共享信号

    PyQt5 笔记7 – 多个类共享信号 应用:对话框发送信号给主窗口,控制主窗口的控件 1.信号传递 主窗口类中自定义信号并在构造函数中绑定槽函数 实例化对话框类时把主窗口的对象传过去 对话框中自定义 ...

  8. pyqt5讲解11:自定义信号和槽

    步骤: 定义信号 定义槽函数 连接信号和槽函数 发射信号 代码示例: # -*- coding: utf-8 -*-"""[简介]内置信号槽信号槽示例"&quo ...

  9. 【QtDesigner 开发笔记】在PyCharm中配置、使用方法、信号与槽、菜单、Tab Widget、子窗口

    QtDesigner开发笔记 在PyCharm中配置QtDesigner和Pyuic QtDesigner使用:跑起一个最简单的项目 QtDesigner中使用信号与槽 方法1:设计器中连接信号与槽 ...

最新文章

  1. 客快物流大数据项目(五十六): 编写SparkSession对象工具类
  2. YOLO-v5训练自己的数据+TensorRT推理部署(2)
  3. mysql 的select语句_MySQLSELECT语句_MySQL
  4. 计算机丢失ac1st.dll怎么找回,CAD提示ac1st16.dll丢失修复步骤
  5. IDEA添加模块时,插件报错:java.util.NoSuchElementException Collection is empty
  6. macOS Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  7. “智企云中享“,首届SAP中国云大会召开
  8. 用matlab时提示数据写入文件期间被裁剪_用C语言简单开发学生成绩管理系统
  9. OpenShift 4 - 用安全上下文(SC)与安全上下文约束(SCC)控制应用对受保护功能的访问
  10. Qt——P27 QListWidget控件
  11. HttpClient 解释
  12. 网上邻居不能正常访问的处理
  13. wps怎么在中文后面加数字_怎样给wps底部加上页面数字 - 卡饭网
  14. DOS文件系统-FAT32的理解
  15. 【气动学】基于龙格库塔算法实现外弹道仿真含Matlab源码
  16. 服务器ssd内存性能对比,固态硬盘性能排行榜,买之前记得看一看
  17. matlab求合同矩阵,matlab-线性代数 判断 合同矩阵
  18. JSON扩展类——JsonHelper
  19. 【MySQL从入门到精通】【高级篇】(九)InnoDB的B+树索引的注意事项
  20. 二叉树的后序遍历(递归和非递归)

热门文章

  1. tvnewpro 病毒清除
  2. domino导出数据至Excel
  3. [VTK]基于VTK的任意平面切割
  4. SQLiteHelper
  5. 利用JavaScript在ASP.NET中动态生成系统菜单
  6. spring -boot定时任务 quartz 基于 MethodInvokingJobDetailFactoryBean 实现
  7. 算法竞赛注意事项(废话)
  8. vscode 初次安装使用指南
  9. POJ 1330 Nearest Common Ancestors 【LCA模板题】
  10. FreeMarker中文API手册(完整)