PyQT信号槽_学习笔记 (Signals/Slots)
来源:互联网 发布:百度语音识别 python 编辑:程序博客网 时间:2024/06/16 09:03
1、信号定义
通过类成员变量定义信号对象,如:
- class MyWidget(QWidget):
- Signal_NoParameters = PyQt4.QtCore.pyqtSignal() # 无参数信号
- Signal_OneParameter = PyQt4.QtCore.pyqtSignal(int) # 一个参数(整数)的信号
- Signal_OneParameter_Overload = PyQt4.QtCore.pyqtSignal([int],[str]) # 一个参数(整数或者字符串)重载版本的信号
- Signal_TwoParameters = PyQt4.QtCore.pyqtSignal(int,str) # 二个参数(整数,字符串)的信号
- Signal_TwoParameters_Overload = PyQt4.QtCore.pyqtSignal([int,int],[int,str]) # 二个参数([整数,整数]或者[整数,字符串])重载版本的信号
2、信号焕发
通过pyqtSignal对象的emit方法焕发事件,如:
- class MyWidget(QWidget):
- ...
- def mousePressEvent(self, event):
- self.Signal_NoParameters.emit() # 焕发无参数信号
- self.Signal_OneParameter(1) # 焕发一个参数(整数)的信号
- self.Signal_OneParameter_Overload(1) # 焕发一个参数(整数)重载版本的信号
- self.Signal_OneParameter_Overload("abc") # 焕发一个参数(字符串)重载版本的信号
- self.Signal_TwoParameters (1,"abc") # 焕发二个参数(整数,字符串)的信号
- self.Signal_TwoParameters_Overload(1,2) # 焕发二个参数(整数,整数)重载版本的信号
- self.Signal_TwoParameters_Overload(1,"abc") # 焕发二个参数(整数,字符串)重载版本的信号
3、槽函数定义
通过@PyQt4.QtCore.pyqtSlot装饰方法定义槽函数,如:
- class MyWidget(QWidget):
- ...
- @PyQt4.QtCore.pyqtSlot()
- def setValue_NoParameters(self):
- '''''无参数槽方法'''
- pass
- @PyQt4.QtCore.pyqtSlot(int)
- def setValue_OneParameter(self,nIndex):
- '''''一个参数(整数)槽方法'''
- pass
- @PyQt4.QtCore.pyqtSlot(str)
- def setValue_OneParameter_String(self,szIndex):
- '''''一个参数(字符串)的槽方法'''
- pass
- @PyQt4.QtCore.pyqtSlot(int,int)
- def setValue_TwoParameters(self,x,y):
- '''''二个参数(整数,整数)槽方法'''
- pass
- @PyQt4.QtCore.pyqtSlot(int,str)
- def setValue_TwoParameters_String(self,x,szY):
- '''''二个参数(整数,字符串)槽方法'''
- pass
4、信号连接
通过pyqtSignal的connect方法连接信号和槽方法或者可调用对象,如:
- app = QApplication(sys.argv)
- widget = MyWidget()
- widget.show()
- widget.Signal_NoParameters.connect(self.setValue_NoParameters,Qt.QueuedConnection) # 连接无参数信号
- widget.Signal_OneParameter.connect(self.setValue_OneParameter,Qt.QueuedConnection) # 连接一个参数(整数)信号
- widget.Signal_OneParameter_Overload[int].connect(self.setValue_OneParameter,Qt.QueuedConnection) # 连接一个参数(整数)重载版本信号
- widget.Signal_OneParameter_Overload[str].connect(self.setValue_OneParameter_String,Qt.QueuedConnection) # 连接一个参数(整数)重载版本信号
- widget.Signal_TwoParameters.connect(self.setValue_TwoParameters,Qt.QueuedConnection) # 连接二个参数(整数)信号
- widget.Signal_TwoParameters_Overload[int,int].connect(self.setValue_TwoParameters,Qt.QueuedConnection) # 连接二个参数(整数,整数)重载版本信号
- widget.Signal_TwoParameters_Overload[int,str].connect(self.setValue_TwoParameters_String,Qt.QueuedConnection) # 连接二个参数(整数,字符串)重载版本信号
- # coding=gbk
- import sys
- from PyQt4.QtCore import *
- from PyQt4.QtGui import *
- class MyWidget(QWidget):
- OnClicked = pyqtSignal([int,int],[int,str])
- def __init__(self, parent=None):
- super(MyWidget,self).__init__(parent)
- def mousePressEvent(self, event):
- if event.button() == Qt.LeftButton:
- self.OnClicked.emit(event.x(),event.y())
- event.accept()
- elif event.button() == Qt.RightButton:
- self.OnClicked[int,str].emit(event.x(),str(event.y()))
- event.accept()
- else:
- super(MyWidget,self).mousePressEvent(self, event)
- def OnValueChanged_int(x,y):
- print("左键(%d,%d)" % (x,y))
- def OnValueChanged_string(szX,szY):
- print('右键(' + str(szX) + ',' + szY + ')')
- app = QApplication(sys.argv)
- widget = MyWidget()
- widget.show()
- widget.OnClicked.connect(OnValueChanged_int,Qt.QueuedConnection)
- widget.OnClicked[int,str].connect(OnValueChanged_string,Qt.QueuedConnection)
- sys.exit(app.exec_())
0 0
- PyQT信号槽_学习笔记 (Signals/Slots)
- PyQT信号槽_学习笔记 (Signals/Slots)
- PyQT信号槽_学习笔记 (Signals/Slots)
- 信号(signals)和槽(slots)
- signals/slots(信号/槽)
- 信号(signals)和槽(slots)
- 信号(signals)和槽(slots)
- Qt 定义信号 signals 和 槽 slots
- 信号(signals)和槽(slots) 精讲
- Signals and Slots学习笔记(翻译)
- Qt:信号与槽(Signals and Slots) 上
- Qt:信号与槽(Signals and Slots) 下
- 深入信号和槽(Signals and Slots in Depth)
- 深入信号和槽(Signals and Slots in Depth)
- QT的信号和槽机制:Signals and Slots
- Qt:信号与槽(Signals and Slots) 上
- Qt:信号与槽(Signals and Slots) 下
- Qt之信号signals和槽slots详解
- linux简介
- 什么是垂直搜索引擎
- 黑马程序员——this,super,interface,final,abstract,static
- 基于 Lucene 的8 个开源搜索引擎
- 判断网络状态公共类
- PyQT信号槽_学习笔记 (Signals/Slots)
- C++ 远程 shell (cmd)
- 使用VS2010打开VS2012/VS2013 的解决方案
- Lucene_demo06_几种搜索
- 第6周 项目2-建立链栈算法库
- 3.2.2 队列消息和非队列消息
- Lucene3.6 之 Filter
- python-ConfigParser模块学习
- iOS-UI-基础控件核心API-视图控制器(ViewControl)