qwidget show 是否有信号_PyQt5信号与槽机制入门(一)
信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。当事件或者状态发生改变时,就会发出信号,信号会触发所有与这个事件(信号)相关的函数(槽);一个信号可以连接多个槽,一个槽也也可监听多个信号。关于PyQtAPI中信号与槽的更多详细解释,可以参考官方网站:https://www.riverbankcomputing.com/static/Docs/PyQt5/signals_slots.html?hightlight=pyqtsignal#P与Qt.QtCore.pyqtSignal
1、内置信号与槽的使用
指在发射信号时,使用窗口控件的函数,而不是自定义的函数。本例将一个按钮对象内置clicked信号连接到自定义的槽函数cao(),点击“点击我测试”按钮,就会弹出一个信息提示框。
#0、导入需要的包和模块from PyQt5.Qt import *import sys
#1、创建一个应用程序对象。app=QApplication(sys.argv)
#2、控件的操作#创建控件window=QWidget()
btn = QPushButton(window)btn.setText("点击我测试")
def cao(): QMessageBox.information(window,"信息提示框","点我干嘛")
btn.clicked.connect(cao)
#设置控件(大小、位置、样式...)window.setWindowTitle("Python数据分析实例")window.resize(300,300)window.move(400,200)
#展示控件window.show()
#3、应用程序的执行,进入到消息循环sys.exit(app.exec_())
2、自定义信号与槽的使用
指在发射信号时,不使用窗口控件的函数,而是利用自定义的函数,即使用pyqtSignal类实例发射的信号。内置函数只包含常用的信号,有些信号找不到对应的内置函数,只有特定情况下如按钮事件才能发射这种信号,其次,传递的参数是特定的,因此,使用自定义信号更灵活地实现实际业务逻辑,比如在程序中某个地方需要发射一个信号,传递多种数据类型(参数),然后在槽函数中接受传递过来的数据。
使用PyQt5.QtCore.pyqSignal()函数可以为QObject创建一个信号,使用pyqtSignal()函数可以把信号定义为类的属性。信号必须在类创建时定义,不能再类创建后作为类的属性动态的添加。
classFoo(QObject):# This will cause problems because each has the same C++ signature.valueChanged=pyqtSignal([dict],[list])#为控件创建信号
#传递一个参数from PyQt5.QtCore import QObject,pyqtSignal#信号对象class QTypeSignal(QObject): #生成一个信号 sendmsg=pyqtSignal(str)
def __init__(self): super(QTypeSignal, self).__init__()
def run(self): #发射信号 self.sendmsg.emit("Python数据分析实例")
#槽对象class QTypeSlot(QObject): def __init__(self): super(QTypeSlot, self).__init__() #槽对象中的槽函数 def get(self,msg): print("QSlot get msg=>"+msg)
if __name__ =="__main__": # 把信号绑定到槽对象中的槽函数get()上,槽函数能接受到所发射的信号”Python数据分析实例“,数据成功传递。 send =QTypeSignal() slot =QTypeSlot() #**************将信号与槽函数绑定起来**************开始
send.sendmsg.connect(slot.get)
send.run() #************将信号与槽函数绑定起来****************结束
#*************把信号与槽函数连接断开***************开始 send.sendmsg.disconnect(slot.get)
send.run() #*************把信号与槽函数连接断开***************结束
#传递两个或多个参数,同理
from PyQt5.QtCore import QObject, pyqtSignal
# 信号对象class QTypeSignal(QObject): # 生成一个信号 sendmsg = pyqtSignal(str,str)
def __init__(self): super(QTypeSignal, self).__init__()
def run(self): # 发射信号(两个参数) self.sendmsg.emit("Python数据分析实例","Brook")
# 槽对象class QTypeSlot(QObject): def __init__(self): super(QTypeSlot, self).__init__()
# 槽对象中的槽函数 def get(self, msg1,msg2): print("QSlot get msg=>" + msg1+' '+ msg2)
if __name__ == "__main__": # 把信号绑定到槽对象中的槽函数get()上,槽函数能接受到所发射的信号”Python数据分析实例“,数据成功传递。 send = QTypeSignal() slot = QTypeSlot() # **************将信号与槽函数绑定起来**************开始
send.sendmsg.connect(slot.get)
send.run() # ************将信号与槽函数绑定起来****************结束
# *************把信号与槽函数连接断开***************开始 send.sendmsg.disconnect(slot.get)
send.run() # *************把信号与槽函数连接断开***************结束
其他信号与槽高级用法,后续详细介绍。
qwidget show 是否有信号_PyQt5信号与槽机制入门(一)相关推荐
- pyqt 槽任意参数_PyQt5信号与槽机制入门(一)
信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制.当事件或者状态发生改变时,就会发出信号,信号会触发所有与这个事件(信号)相关的函数(槽):一个信号可 ...
- 【QT|趣谈】最详细的信号槽机制介绍!
用最有趣的方式解释信号槽通讯机制 1 导语:信号槽的前世今生 2 QT的信号槽 2.1什么是信号槽? 2.2 用严谨的语言解释信号槽 3 信号槽实战 3.1 信号槽实例 4 信号槽plus 4.1 L ...
- pyqt 槽任意参数_PyQt5快速入门(二)PyQt5信号槽机制
PyQt5快速入门(二)PyQt5信号槽机制 一.信号槽机制简介 1.信号槽简介 信号槽是Qt的核心机制,也是PyQt编程中对象进行通信的机制.在Qt中,QObject对象和PyQt中所有继承自QWi ...
- python qt5 数据改变 触发信号_pyqt5自定义信号实例解析
本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下. PyQt5已经自动定义了很多QT内建的信号.但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal.可以 ...
- PyQt5(五)信号与槽机制
信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方. 信号和槽是 ...
- QT 的信号与槽机制介绍
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
- python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals slots)
引用文章:http://code.py40.com/pyqt5/22.html 在这一部分的pyqt5教程中,我们将探讨PyQt5中的事件Event 文章目录 事件 Event 信号槽 Signals ...
- QT对象树、信号和槽机制
文章目录 一 .对象树是什么? 二.信号和槽的基本概念 2.1 信号 2.2 槽 2.3 松散耦合 2.4 特点 三.示例 总结 一 .对象树是什么? 对象树是由父类和若干子类对象组成,而子类也可以由 ...
- 【qt】QT 的信号与槽机制
QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...
最新文章
- 解题报告:luoguP1462 通往奥格瑞玛的道路(二分、最短路)
- 【万里征程——Windows App开发】DatePickerFlyout、TimePickerFlyout的使用
- iPad Pro变生产力工具,你还缺这个轻量级浏览器端代码编辑器
- 【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)...
- 用python爬虫抓站的一些技巧总结
- 2020-07-15 CVPR2020 表示学习论文讨论(4) 笔记
- 给opentaps添加定制的表和字段
- 现实世界的Windows Azure:与iQmetrix的市场营销副总裁Anne Weiler对话
- java list容器_Java 容器列表(三)- ArrayList
- opencv 像素操作
- oracle dblink使用
- Java生成UUID方式
- fdisk分区以及格式化磁盘简要步骤
- 解决异常 more than one ‘primary‘ bean found among candidates: [jacksonObjectMapper, objectMapper]
- 1T免费全能空间 注册即可开通
- uni-app学习笔记--浏览vue-cli创建uni-app模板的文件结构
- Android利用jsoup爬虫爬网页数据(二)
- pytorch整理(三)
- 访问认证(三):Bearer
- 浅谈开发与研发之差异
热门文章
- Voovan网络编程介绍
- mybatis ------ 懒加载(八)
- python二次开发odoo_odoo二次开发 - 战鹏的Blog - OSCHINA - 中文开源技术交流社区
- 黑莓桌面管理器4.2_虚拟桌面管理器行业现状调研分析及发展趋势预测报告(2020)...
- linux 2种循环,只以换行符分割,不以空格分割。
- linux 如何自定义安装路径,Linux下安装mysql并自定义数据的存储路径
- android java写文件_Android中文件的读写(一)----流操作
- python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画
- DotNetCore中异步编程的实用演练
- 在Visual Studio中使用C#脚本(CSX脚本)生成代码