Qt for Python UsingQtProperties: Difference between revisions
Jump to navigation
Jump to search
m (CristianMaureiraFredes moved page Using Qt Properties in PySide to Qt for Python UsingQtProperties) |
Wolf Bublitz (talk | contribs) (fixed identation of getters, setters, signals and properties) |
||
Line 13: | Line 13: | ||
self.ppval = startval | self.ppval = startval | ||
def readPP(self): | def readPP(self): | ||
return self.ppval | |||
def setPP(self,val): | def setPP(self,val): | ||
self.ppval = val | |||
pp = Property(int, readPP, setPP) | pp = Property(int, readPP, setPP) | ||
obj = MyObject() | obj = MyObject() | ||
obj.pp = 47 | obj.pp = 47 | ||
Line 37: | Line 38: | ||
self._person_name = name | self._person_name = name | ||
def _name(self): | def _name(self): | ||
return self._person_name | |||
@Signal | @Signal | ||
def name_changed(self): | def name_changed(self): | ||
pass | |||
name = Property(str, _name, notify=name_changed) | name = Property(str, _name, notify=name_changed) | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 12:03, 9 May 2018
PySide2 provides a Property function which allows for declaring properties that simultaneously behave both as Qt and Python properties, and have their setters and getters defined as Python functions.
A short example illustrating defining and accessing a Qt property from Python is given below:
from PySide2.QtCore import QObject, Property
class MyObject(QObject):
def __init__(self,startval=42):
QObject.__init__(self)
self.ppval = startval
def readPP(self):
return self.ppval
def setPP(self,val):
self.ppval = val
pp = Property(int, readPP, setPP)
obj = MyObject()
obj.pp = 47
print(obj.pp)
Properties in QML expressions
If you are using properties of your objects in QML expressions, QML requires the property to be NOTIFYable. This can be done using a simple signal:
from PySide2.QtCore import QObject, Signal, Property
class Person(QObject):
def __init__(self, name):
QObject.__init__(self)
self._person_name = name
def _name(self):
return self._person_name
@Signal
def name_changed(self):
pass
name = Property(str, _name, notify=name_changed)