Qt for Python UsingQtProperties: Difference between revisions
Jump to navigation
Jump to search
AutoSpider (talk | contribs) (Rename category "LanguageBindings::PySide" -> "PySide") |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:QtForPython]] | |||
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: | A short example illustrating defining and accessing a Qt property from Python is given below: | ||
< | <syntaxhighlight lang="python" line='line'> | ||
from | from PySide2.QtCore import QObject, Property | ||
class MyObject(QObject): | class MyObject(QObject): | ||
def __init__(self,startval=42): | |||
QObject.__init__(self) | |||
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 | print(obj.pp) | ||
print (obj.pp) | </syntaxhighlight> | ||
</ | |||
== Properties in QML expressions == | == Properties in QML expressions == | ||
Line 39: | Line 29: | ||
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: | 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: | ||
< | <syntaxhighlight lang="python" line='line'> | ||
class Person( | from PySide2.QtCore import QObject, Signal, Property | ||
class Person(QObject): | |||
def __init__(self, name): | |||
QObject.__init__(self) | |||
self._person_name = name | |||
def _name(self): | def _name(self): | ||
return self._person_name | |||
@ | @Signal | ||
def name_changed(self): | |||
pass | |||
name = | name = Property(str, _name, notify=name_changed) | ||
</ | </syntaxhighlight> |
Revision as of 12:58, 18 April 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)