1

我厌倦了编写相同的代码来Properties声明PySide2

class BackEnd(QObject):

    my_prop_updated = Signal()

    @Property(bool)
    def my_prop(self):
        print('getter invoked'))
        return self._my_prop

    @my_prop.setter
    def set_my_prop(self, value):
        print('setter invoked')
        self._my_prop = value
        self.my_prop_updated.emit()

    def __init__(self):
        super().__init__()
        self._my_prop = None

有什么方法可以使用 python 描述符Properties吗?像这样:

class QTPropBool(Property):
    my_prop_updated = Signal()

    def my_getter(self, obj):
        print('getter invoked')
        return self._my_prop

    def my_setter(self, obj, value):
        print('setter invoked')
        self._my_prop = value
        self.my_prop_updated.emit()

    def __init__(self):
        super().__init__(bool, self.my_getter, self.my_setter, notify=self.my_prop_updated)


class BackEnd(QObject):
    my_prop = QTPropBool()

它给了我一个错误:

AttributeError: 'PySide2.QtCore.Signal' object has no attribute 'emit'

可能是因为它是Property类,而不是QObject我没有调用QObject的构造函数。有没有办法避免代码重复?

4

0 回答 0