[PyQt] Use pyqtProperty on QObject instance

Patrick Stinson patrickkidd at gmail.com
Mon May 27 19:38:04 BST 2019


So they are. I wonder if this can be done with attached properties.

> On May 27, 2019, at 9:59 AM, Phil Thompson <phil at riverbankcomputing.com> wrote:
> 
>> 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