vue项目接口域名动态的获取方法
267
2022-08-28
PyQt给组件创建信号并使用自定义信号源码实例(pyqt自定义信号和槽)
#coding=utf8'''可以通过QObject.emit()给一个组件创建一个自己的信号。一个信号如果不带有参数(不带有括号,例如atzero),则该信号是一个短路信号。当一个短路信号被发射,任何数字都可以被当做一个详细参数传递给emit()方法,并且它们作为一个Python对象被传递。这避免了将参数转换为C ++类型的开销,也意味着可以传递任意Python对象,该对象不能转换为C ++数据类型。带有至少一个参数的信号要么是一个Qt信号,要么是一个非短路Python信号。在这些事例上,PyQt将检查信号是否是一个Qt信号,如果不是,将把该信号作为一个Python信号处理。不管是Qt信号或者非短路Python信号,参数都将被转换为C++数据类型。'''import sysfrom PyQt4.QtCore import *from PyQt4.QtGui import *#创建一个QSpinBox的类class ZeroSpinBox(QSpinBox): #定义一个静态全局变量,用来记录为零的次数 zeros=0 def __init__(self,parent=None): #调用QSpinBox进行初始化 super(ZeroSpinBox,self).__init__(parent) #并在调用连接函数在值改变时 #激发信号atzero并返回一个数字 self.connect(self, SIGNAL("valueChanged(int)"),self.checkzero) def checkzero(self): #当值为0时 if self.value()==0: #变量加一 self.zeros +=1 #调用emit函数创建一个SIGNAL并返回一个数字 #这里的信号atzero没有括号是为了告诉PyQt,这是个短路信号。 self.emit(SIGNAL("atzero"),self.zeros) class Form(QDialog): def __init__(self,parent=None): super(Form,self).__init__(parent) #创建一个ZeroSpinBox对象实例 zerospin=ZeroSpinBox() #创建一个水平布局的对象实例 hb=QHBoxLayout() #把ZeroSpinBox对象实例添加到水平布局实例中 hb.addWidget(zerospin) #把水平布局实例加入Form中 self.setLayout(hb) #把ZeroSpinBox和Form连接起来 #当信号atzero被激发是,调用announce #把信号激发是返回的值,传递给announce函数 self.connect(zerospin, SIGNAL("atzero"),self.announce) #创建一个带有一个参数的函数 def announce(self,zeros): #打印显示零的次数 print "ZeroSpinBox has been at zero %d times" % zerosapp=QApplication(sys.argv)form=Form()form.show()app.exec_()
运行结果截图:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~