[PyQt] Use pyqtProperty on QObject instance

Patrick Stinson patrickkidd at gmail.com
Mon May 27 17:41:41 BST 2019


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.

> 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