[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: Re: Is there a way to create an "actual" Qt property in PyQt?
From: Phil Thompson <phil () riverbankcomputing ! com>
Date: 2020-10-22 21:24:48
Message-ID: 9cc8ede06765432a8e09985a7d5c18aa () riverbankcomputing ! com
[Download RAW message or body]
On 22/10/2020 22:12, Ales Erjavec wrote:
>> ...
>> Note that I don't really care for some further lines in the class
>> definition/constructor; what I'd really prefer is to always have a
>> consistent way to access properties if they *also are* Qt properties.
>
> A while ago I had a similar thought of subverting the property
> descriptor protocol:
>
>
> class Q_Property(pyqtProperty):
> """
> A property descriptor that more closely resembles the
> Q_PROPERTY macro.
>
> Encourage a coding style which is consistent with Qt.
>
> Example:
> >>> class Foo(QObject):
> ... _bar = 0
> ... def bar(self):
> ... return self._bar
> ... def setBar(self, bar):
> ... self._bar = bar
> ... bar = Q_Property(int, fget=bar, fset=setBar)
>
> >>> obj = Foo()
> >>> obj.setBar(2)
> >>> obj.bar()
> 2
> >>> obj.setProperty("bar", 42)
> True
> >>> obj.property("bar")
> 42
> >>> obj.bar()
> 42
> """
> def __get__(self, obj, cls=None):
> # Simply return the contained (bound) fget method
> return self.fget.__get__(obj, cls)
>
> def __set__(self, obj, value):
> raise TypeError
>
> # these do not work
> def setter(self, f):
> raise RuntimeError
>
> def getter(self, f):
> raise RuntimeError
IMHO, that's not a property.
> But have not actually used it anywhere. Usually I just
> use the convention of adding a underscore suffix to the
> property member i.e.
>
> bar_ = pyqtProperty(int, fget=bar, fset=setBar)
Q_PROPERTY is a way of implementing in C++ something that is a property
in QML and Qt Designer. It is not a property in C++.
Python properties are proper properties.
Phil
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic