Qt for Python UsingQtProperties

From Qt Wiki
Jump to navigation Jump to search


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)