Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Qt for Python UsingQtProperties: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
m (CristianMaureiraFredes moved page Using Qt Properties in PySide to Qt for Python UsingQtProperties)
(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                                                                               
        return self.ppval                                                                               
                                                                                                      
                                                                                                      
def setPP(self,val):                                                                                 
    def setPP(self,val):                                                                                 
    self.ppval = 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
        return self._person_name


@Signal
    @Signal
def name_changed(self):
    def name_changed(self):
    pass
        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)