事件 Event

所有的GUI程序都是事件驱动的。事件主要由用户触发,但也可能有其他触发方式:例如网络连接、window manager或定时器。当我们调用QApplication的exec_()方法时会使程序进入主循环。主循环会获取并分发事件。

在事件模型中,有三个参与者:

事件源

事件对象

事件接收者

事件源是状态发生变化的对象。它会生成事件。事件(对象)封装了事件源中状态的变动。事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。

PyQt5有一个独特的signal&slot(信号槽)机制来处理事件。信号槽用于对象间的通信。signal在某一特定事件发生时被触发,slot可以是任何callable对象。当signal触发时会调用与之相连的slot。

importsysfrom PyQt5.QtCore importQtfrom PyQt5.QtWidgets import(QWidget, QLCDNumber, QSlider,

QVBoxLayout, QApplication)classExample(QWidget):def __init__(self):

super().__init__()

self.initUI()definitUI(self):

lcd= QLCDNumber(self) #创建LCD数字对象

sld = QSlider(Qt.Horizontal, self) #创建滑块水平拉动

vbox= QVBoxLayout() #垂直布局管理器

vbox.addWidget(lcd) #为lcd和sld布局,因为垂直所以一上一下

vbox.addWidget(sld)

self.setLayout(vbox)

sld.valueChanged.connect(lcd.display)#这个例子中展示了一个QtGui.QLCDNumber和QtGui.QSlider。

#lcd的值会随着滑块的拖动而改变。

#在这里我们将滚动条的valueChanged信号连接到lcd的display插槽。

#sender是发出信号的对象。receiver是接收信号的对象。slot(插槽)是对信号做出反应的方法。

self.setGeometry(300, 300, 250, 150)

self.setWindowTitle('Signal & slot')

self.show()if __name__ == '__main__':

app=QApplication(sys.argv)

ex=Example()

sys.exit(app.exec_())

按键触发事件

设置按键触发,需要要到QWidget下的keyPressEvent方法,不过我们可自定制

importsysfrom PyQt5.Qt importQtfrom PyQt5.QtWidgets importQApplication,QWidgetclassExample(QWidget):def __init__(self):

super().__init__()

self.initUI()definitUI(self):

self.setWindowTitle("biao")

self.setGeometry(300,300,300,300)

self.show()def keyPressEvent(self, QKeyEvent): #自定义按键触发事件

if QKeyEvent.key() == Qt.Key_Escape: #当按键为Exs时

self.close()if __name__ == '__main__':

app=QApplication(sys.argv)

ex=Example()

sys.exit(app.exec_())

事件发送者

有时需要知道信号是由哪个控件发出的。对此PyQt5提供了sender()方法。

1 from PyQt5.QtWidgets importQMainWindow,QApplication,QPushButton2 importsys3

4 classExample(QMainWindow):5

6 def __init__(self):7 super().__init__()8

9 self.initUI()10

11 definitUI(self):12

13 btn1 = QPushButton("按钮1",self)14 btn1.move(30,30)15 btn2 = QPushButton("按钮2",self)16 btn2.move(130,30)17

18 btn1.clicked.connect(self.buttonCliked) #创立事件,当btn被点击时

19 btn2.clicked.connect(self.buttonCliked)20 self.statusBar() #用QMainWindow才能有状态栏,菜单栏,工具栏

21

22 self.setGeometry(300,300,300,300)23 self.setWindowTitle("biaobiao")24 self.show()25

26 defbuttonCliked(self):27 #通过调用sender()方法来判断信号源, 并将其名称显示在窗体的状态栏中。

28 sender = self.sender() #获取sender对象

29 self.statusBar().showMessage(sender.text()+'was pressed') #获取信号源名称

30

31 if __name__ == '__main__':32

33 app =QApplication(sys.argv)34 ex =Example()35 sys.exit(app.exec_())

发出信号

通过QObject创建的对象可以发出信号

信号要与事件连接,事件由事件管理器处理器控制

importsysfrom PyQt5.QtWidgets importQMainWindow,QApplicationfrom PyQt5.QtCore importQObject,pyqtSignalclass Communicate(QObject): #创建连接

closeAPP =pyqtSignal() #创建信号

classExmple(QMainWindow):def __init__(self):

super().__init__()

self.initUI()definitUI(self):

self.c= Communicate() #创建连接

self.c.closeAPP.connect(self.close) #信号连接事件

self.setWindowTitle("biaobiao")

self.setGeometry(300,300,300,300)

self.show()def mousePressEvent(self, event): #事件处理器

self.c.closeAPP.emit()if __name__ == '__main__':

app=QApplication(sys.argv)

ex=Exmple()

sys.exit(app.exec_())

python 波形发生_事件与信号相关推荐

  1. python 波形包络线_一个简单的波形包络提取算法

    最近做了一个项目来提取语音信号包络波形,因此,花一些时间来研究各种包络提取算法. 所谓包络检测被称为振幅解调,在许多领域都有重要的应用.它假设载波信号被确定,所以,通常的方式同步解调,优选以这样的方式 ...

  2. python 目标直方图_深入了解扩展事件–直方图目标

    python 目标直方图 An Extended events target is the destination for all of the information that is capture ...

  3. ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB

    ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB 目录 ICL8038信号发生器 正弦波 方波 三角波 低频信号发生 波形发生 原理图和PCB 基本原理 芯片选型 ...

  4. python之禅怎么看_如何看待《Python之禅》事件?

    当我写文章的时候我就知道会有这个问题出现,本来觉得上周四.五就会出现. 直到<Python之禅>事件之你们想要的实锤 发出,对方发现这下子没法狡辩了,只能搅浑呗.当事实对你有利时,多强调事 ...

  5. python 电压 谐波_从信号中过滤谐波(python)

    我看到类似的问题部分解决了,但是在matlab中ref1,ref2,但我正在使用python.我是新的处理信号,我正在努力消除谐波从以下信号. 这些是无线电观测(在3和7太赫兹).首先,我想得到主要振 ...

  6. 深入理解python异步编程_深入理解Python异步编程

    1 什么是异步编程 1.1 阻塞程序未得到所需计算资源时被挂起的状态. 程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的. 常见的阻塞形式有:网络I/O阻塞.磁盘I/O ...

  7. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  8. python实现网关_用python实现与小米网关通讯

    python 与小米网关通讯的三块内容: 以下内容的理解需要配合<绿米网关局域网通讯协议>使用 1.监听网关发出的组播信息:(有网关及连接设备的生命信号,事件信息) 2.读取需要获得的信息 ...

  9. 计算机编程导论python程序设计答案-学堂云_计算机科学与Python编程导论_作业课后答案...

    学堂云_计算机科学与Python编程导论_作业课后答案 答案: 更多相关问题 保本基金参与股指期货交易,应当根据风险管理的原则,以套期保值为目的.() 基金经理主要依据股票投资价值报告来决定实际的投资 ...

最新文章

  1. SM$TS_USED,SM$TS_FREE,SM$TS_AVAIL
  2. Linux centos6.5 64下oracle10g_静默安装完整版
  3. jpgraph中文使用手册之文本和字体控制教程
  4. 使用yum更新时不升级Linux内核的方法
  5. vsphere vcenter安装
  6. leetcode 312. Burst Balloons | 312. 戳气球(暴力递归->DP)
  7. python中s和t是两个集合、对s|t描述正确的是_全国计算机等级考试二级教程--python语言程序设计(2018年版)第六章:组合数据类型...
  8. redis3.0.7_sds.c_sdsnewlen()
  9. android光照传感器,详解 android 光线传感器 light sensor的使用
  10. 技术核心 | MySQL性能结构优化原理
  11. sql自定义函数学习思路_学习SQL:用户定义的函数
  12. yolov 论文发表在什么期刊上_论文发表期刊发表论文研究方法
  13. leetcode—13.链表基本操作类题目python解答
  14. VUE实现输入完当前input后自动跳到下一个input
  15. 三分钟彻底弄明白shiro原理
  16. LeetCode 单调栈练习题归纳总结
  17. LeetCode题解(1872):石子游戏VIII(Python)
  18. 基于在线学习行为的评价模型的设计与实现
  19. pytorch深度学习出错整理(一)
  20. 港科夜闻|2022年香港科大气候适应及复原力大会圆满闭幕,政经领袖研讨香港气候政策与绿色金融发展...

热门文章

  1. ES6-10 super、4种遍历方式、原型、symbol遍历
  2. JSON基础与数据解析、JSON方法、AJAX初识
  3. [题解]Codeforces Round #519 - B. Lost Array
  4. 2017-2018-1 20155301 《信息安全系统设计基础》第7周学习总结
  5. mysqlpump 备份文件压缩对比
  6. JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
  7. MSN消息提示类(II)
  8. opencv-python单目视觉标定,简单易用。
  9. Lines色线halcon算子,持续更新
  10. 有限元分析笔记01-平面应力和平面应变