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)