PySide学习笔记第八章-事件和信号

PySide学习笔记第⼋章-事件信号
下⾯我们探索下应⽤中的事件和信号
⼀、事件
在GUI编程中,事件是很重要的⼀部分,事件是由系统或⽤户产⽣的,当我们调⽤应⽤的 exec_()函数的时候,应⽤进⼊主循环,主循环获取事件然后将事件信息传递给对象,Qt具有独特的信号槽机制( signal and slot mechanism)
所有的GUI应⽤都是事件驱动的,⼀个应⽤在其⽣存过程中对不同的事件类型做出响应,事件主要是由操作应⽤的⽤户产⽣的,但是也可以以其他的任何⽅式产⽣,例如:因特⽹联接,窗⼝管理器,计时器。在事件模型中,它们都是参与者:
事件源
事件对象
事件⽬标
信号源是⼀个对象,⽽这个对象的状态可以改变。它产⽣事件,事件源(Event对象)将状态改变封装在内部。事件⽬标是事件对象想要通知的⽬标。信号槽机制就是⽤来在不同的对象之间进⾏信息交流的。当⼀个特定的事件发⽣时,信号被释放,槽 可以是任何python可以调⽤的东西,当⼀个释放的信号和⼀个槽联系起来后,信号⼀旦释放,该槽酒会被调⽤
⼆、信号槽机制
下⾯是对PySide (Qt)的信号槽机制的⼀个简单演⽰
# -*- coding: utf-8 -*-
"""
ZetCode PySide tutorial
In this example, we connect a signal
of a QtGui.QSlider to a slot
of a QtGui.QLCDNumber.
author: Jan Bodnar
website: zetcode
last edited: August 2011
盲区监测
"""
import sys
from PySide import QtGui, QtCore
class (QtGui.QWidget)
def __init__(self)
super(Example, self).__init__()
self.initUI()
def (self)
lcd QtGui.QLCDNumber(self) # 创建⼀个LCD表盘
sld QtGui.QSlider(QtCore.Qt.Horizontal, self) # 创建⼀个⽔平滑动轴
vbox QtGui.QVBoxLayout() # 创建⼀个竖直框布局类,⽤于放置lcd,和sld
vbox.addWidget(lcd)
虚拟墓地
vbox.addWidget(sld)
self.setLayout(vbox)
t(lcd.display) # 将滑动轴被拖动的事件(信号)和lcd.display函数(槽)联系起来
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Signal & slot')
self.show()
def ()
app QtGui.QApplication(sys.argv)
ex Example()
<_())
if __name__ '__main__'
main()
三、重新实现事件处理函数
在PySide(Qt)中,事件都是通过重新定义事件处理函数的⽅式来处理
这⾥重新定义了keyPressEvent()函数 ,对于每⼀个窗⼝都会有⼀个默认的keyPressEvent()函数继承于QtGui.QWidget,这⾥重新定义了该函数,使得点击esc键的时候退出当前窗⼝
四、事件发送者 Event sender
有时候我们可以很⽅便的知道,哪⼀个widget是信号的发送者,PySide有⼀个sender()函数
联合签名入口在本⽰例中,演⽰ 信号的发出者
import sys
from PySide import QtGui, QtCore
class (QtGui.QMainWindow)
def __init__(self)
tpe薄膜super(Example, self).__init__()
self.initUI()
def (self)
btn1 QtGui.QPushButton("Button 1", self) # 创建两个按钮以及设置好其位置
btn2 QtGui.QPushButton("Button 2", self)
t(self.buttonClicked) # 将特定按钮的点击(信号)和 self.buttonClicked(槽)绑定
t(self.buttonClicked)
self.statusBar()
self.setGeometry(300, 300, 290, 150)led照明电路
self.setWindowTitle('Event sender')
self.show()
def (self)# 定义槽函数
sender self.sender()
self.statusBar().() ' was pressed')
def ()
app QtGui.QApplication(sys.argv)
ex Example()
<_())
if __name__ '__main__'
main()
5 、释放信号
由QtCore.QObject创建的对象可以释放信号,如果我们点击button,就会产⽣⼀个信号(⽆论你接受与否)在下⾯的代码中我们会看到,如何释放⼀个⾃定义的信号
def mousePressEvent(self, event): # 我们⾃定义⼀个信号叫做closeApp只要在窗⼝内点击⿏标都会释放⼀个信号
# -*- coding: utf-8 -*-
"""
ZetCode PySide tutorial
In this example, we show how to emit a
signal.
author: Jan Bodnar
website: zetcode
last edited: August 2011
"""
import sys
from PySide import QtGui, QtCore
class (QtCore.QObject)
closeApp QtCore.Signal() # 创建⼀个信号: closeApp
class (QtGui.QMainWindow)
def __init__(self)
双向丝杆super(Example, self).__init__()
self.initUI()
def (self)
self.c Communicate() # 基于QtCore.QObject我们创建⼀个类,当该类实例化的时候创建closeApp信号t(self.close) # 将closeApp信号和self.close槽函数联系起来
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Emit signal')
self.show()
def (self, event)# 定义槽函数,当我们在该窗⼝⾥点击的时候该信号就会释放
def ()
app QtGui.QApplication(sys.argv)
ex Example()
<_())
if __name__ '__main__'
main()

本文发布于:2024-09-21 19:53:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/197419.html

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

标签:事件   信号   对象   创建   函数   释放   时候   点击
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议