PyQT信号槽_学习笔记 (Signals/Slots)
2015-10-16 09:11
531 查看
1、信号定义
通过类成员变量定义信号对象,如:
[python]
view plaincopy
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方法焕发事件,如:
[python]
view plaincopy
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装饰方法定义槽函数,如:
[python]
view plaincopy
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方法连接信号和槽方法或者可调用对象,如:
[python]
view plaincopy
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) # 连接二个参数(整数,字符串)重载版本信号
sys.exit(app.exec_())5、实例
[python]
view plaincopy
# 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_())
通过类成员变量定义信号对象,如:
[python]
view plaincopy
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方法焕发事件,如:
[python]
view plaincopy
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装饰方法定义槽函数,如:
[python]
view plaincopy
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方法连接信号和槽方法或者可调用对象,如:
[python]
view plaincopy
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) # 连接二个参数(整数,字符串)重载版本信号
sys.exit(app.exec_())5、实例
[python]
view plaincopy
# 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_())
相关文章推荐
- 基于 Qt的聊天工具
- PyQt的signal 和 solit的补充
- SPOJ QTREE(树链剖分)
- PyQt 界面控件常用积累
- QT5入门之12 - QDebug输出调试信息
- pyqt 中生成二维码的代码模块
- QT5入门之12 - 禁止改变窗体大小
- QT5入门之11 - 工具栏
- QT5入门之10 - 启动程序失败,路径或者权限错误
- Qt 中使用智能指针
- pyqt4中对话框模态和非模态
- QT5入门之9 - 菜单栏
- QT5入门之8 - 定时器
- 【Qt】调用WindowsMediaPlayer进行视频播放=文章未整理=
- qt窗口部件的布局
- Qt中Model/View
- Qt下 QString转char*
- QT5入门之7 - 修改程序图标
- Qt 进程通信QSharedMemory
- QT5入门之7 - Qt禁止最大化最小化