[PyQt] Use pyqtProperty on QObject instance

Phil Thompson phil at riverbankcomputing.com
Mon May 27 17:59:06 BST 2019


On 27/05/2019 17:41, Patrick Stinson wrote:
> Ok, that answers my question. I will figure out a way to add the
> properties to the class the first time they are added to one of the
> instances. They are always the same, after all.

Properties (like signals) are part of the class *definition* (as far as 
Qt is concerned). You can't add them dynamically.

Phil

>> On May 27, 2019, at 9:11 AM, Phil Thompson 
>> <phil at riverbankcomputing.com> wrote:
>> 
>>> On 27/05/2019 16:33, Patrick Stinson wrote:
>>> I have a custom object property system that adds properties to 
>>> QObject
>>> instances and am trying to expose those [dynamic] properties to qml.
>>> Is it possible to add a qt property to a QObject instance, as opposed
>>> to adding it using pyqtProperty as a decorator in the class
>>> declaration?
>>> The PyQt5 docs say that you can use pyqtProperty in the same way as
>>> the python property() function apart from the decorator, but I 
>>> haven’t
>>> had much success with this:
>>> def test_property():
>>>    class A(QObject):
>>>        def __init__(self):
>>>            self._mine = 12
>>>            self.mine = pyqtProperty(int, self.get_mine, 
>>> self.set_mine)
>>>        def get_mine(self):
>>>            return self._mine
>>>        def set_mine(self, x):
>>>            self._mine = x
>>>    a = A()
>>>    print(a.mine)
>>>    print(a.mine())
>>> turin:pkdiagram patrick$ python test.py
>>> <PyQt5.QtCore.pyqtProperty object at 0x114ea1840>
>>> Traceback (most recent call last):
>>>  File "test.py", line 743, in <module>
>>>    test_property()
>>>  File "test.py", line 740, in test_property
>>>    print(a.mine())
>>> TypeError: Required argument 'fget' (pos 1) not found
>>> turin:pkdiagram patrick$
>> 
>> Properties are class objects not instance objects.
>> 
>> Phil



More information about the PyQt mailing list