evitando a duplicação de código para propriedades em PySide2

votos
0

Estou cansado de escrever o mesmo código para declarar Propertiespara 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

Existe alguma maneira de fazer uso de descritores de python com Properties? Algo assim:

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()

Dá-me um erro:

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

Provavelmente porque é Propertyclasse, não QObjecte eu não estou chamando QObject's construtor. Existe alguma maneira de evitar a duplicação de código?

Publicado 25/07/2018 em 13:49
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more