azumi
Pyqt控件的信号槽事件定义⽅法
Qt采⽤信号槽来设定UI界⾯上元素动作的事件绑定。⾃Qt4.5开始,引⼊了⼀个新的信号槽与事件绑定的⽅法。界⾯上控件可以发出的默认内容都已经由Qt库定义好了,我们只需要定义处理⽅法即可。
从Designer设计出的控件中会使⽤tObjectName设定控件的名字,这个名字就可以让我们快捷的定义指定信号槽对应的处理⽅法。通过
@PyQt4.QtCore.pyqtslot()修饰⽅法可以完成这⼀动作。定义⽅法如下:
@PyQt4.QtCore.pyqtSlot(参数) #这个参数请到SDK中找,写参数的类型即可
def on_对象名称_信号名称(lf,参数):
#on接tObjectName设定的对象名字再接SDK中标出的信号名称,即可完成信号处理事件的定义
pass
这种定义⽅法同样适⽤与⾃定义的信号槽。
四级包过⾸先需要定义信号:
class MyWidget(QWidget):
Signal_NoParameters = PyQt4.QtCore.pyqtSignal() # ⽆参数信号
Signal_OneParameter = PyQt4.QtCore.pyqtSignal(int) # ⼀个参数(整数)的信号
然后定义信号的激发:
class MyWidget(QWidget):
def mouPressEvent(lf, event):
lf.it() # 焕发⽆参数信号
lf.it(1) # 焕发⼀个参数(整数)的信号
定义槽函数:
class MyWidget(QWidget):
@PyQt4.QtCore.pyqtSlot()
def tValue_NoParameters(lf):
pass
@PyQt4.QtCore.pyqtSlot(int)
def tValue_OneParameter(lf,nIndex):
pass
era之后需要将信号与槽进⾏连接:
widget.t(lf.tValue_NoParameters,Qt.QueuedConnection)
widget.t(lf.tValue_OneParameter,Qt.QueuedConnection)
emit发送信号
#-*-coding:utf-8-*-
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
上海张江集团学校class MyButton(QtGui.QPushButton):
def__init__(lf):
super(MyButton,lf).__init__()
def myClicked(lf):
def showMsg(lf):
print('test')
if__name__ == "__main__":
import sys
app = QApplication(sys.argv) #MyApplication
main_widget = MyButton()
main_widget.show()
<_())
发送带参数的信号
#-*-coding:utf-8-*-
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyButton(QtGui.QPushButton):
def__init__(lf, *args, **kwargs):
QtGui.QPushButton.__init__(lf, *args, **kwargs)
def myClicked(lf):
param=123
def showMsg(lf,a):
print(a)
if__name__ == "__main__":
underneathimport sys
app = QApplication(sys.argv) #MyApplication
main_widget = MyButton()
main_widget.show()
<_())
接收另外页⾯的槽
#!/usr/bin/python
#-*-coding:utf-8-*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
n2听力惊喜的英语from PyQt4.Qt import *
class TitleWidget(QWidget):
def__init__(lf, parent=None):
super(TitleWidget, lf).__init__(parent)
lf.skin_button = QPushButton('dailog')
main_layout = QVBoxLayout()
main_layout.addWidget(lf.skin_button)
lf.tLayout(main_layout)
sabadell# 主⼊⼝⽂件
class MainWidget(QWidget):
def__init__(lf, parent=None):
super(MainWidget, lf).__init__(parent)
lf.title_widget = TitleWidget(lf)
lf.title_widget.tFixedHeight(100)
lf.tMinimumSize(100, 100)
main_layout = QVBoxLayout()
main_layout.addWidget(lf.title_widget)
main_layout.tSpacing(0)
lf.tLayout(main_layout)
def onclick(lf):
print('a')
商业报道
def myclickeddd(lf):
print('b')
@pyqtSlot()
def showSkinWidget(lf):
print('sdf')
if__name__ == "__main__":
import sys
app = QApplication(sys.argv) #MyApplication
main_widget = MainWidget()
main_widget.show()
<_())
星球大战5帝国反击战