支持Qt属性
PyQt5不支持设置和获取Qt属性,就好像它们是普通的实例属性一样。这是因为属性的名称经常与属性的getter方法的名称冲突。
但是,PyQt5确实使用在创建实例时传递的关键字参数来支持属性的初始设置。例如:
act = QAction("&Save", self, shortcut=QKeySequence.Save,
statusTip="Save the document to disk", triggered=self.save)
该示例还演示了使用关键字参数将信号连接到插槽。
PyQt5还支持使用该pyqtConfigure()
方法设置属性值(以及将信号连接到插槽)。例如,以下结果与上面给出的结果相同:
act = QAction("&Save", self)
act.pyqtConfigure(shortcut=QKeySequence.Save,
statusTip="Save the document to disk", triggered=self.save)
定义新的Qt属性
可以使用该pyqtProperty()
函数定义新的Qt属性。它的使用方式与标准Python property()
函数相同。事实上,以这种方式定义的Qt属性也表现为Python属性。
PyQt5.QtCore.pyqtProperty
(type [,fget = None [,fset = None [,freset = None [,fdel = None [,doc = None [,designable = True [,scriptable = True [,stored = True [,user = False [,constant] = False [,final = False [,notify = None [,revision = 0 ] ] ] ] ] ] ] ] ] ]] ] ] )
创建一个既作为Python属性又作为Qt属性的属性。
参数: |
|
---|---|
返回类型: | 属性对象。 |
它也可以pyqtProperty()
像标准Python property()
函数一样用作装饰器。以下示例显示如何int
使用getter和setter 定义属性:
from PyQt5.QtCore import QObject, pyqtProperty
class Foo(QObject):
def __init__(self):
QObject.__init__(self)
self._total = 0
@pyqtProperty(int)
def total(self):
return self._total
@total.setter
def total(self, value):
self._total = value
如果您更喜欢Qt术语,您也可以使用write
而不是 setter
(而read
不是getter
)。