生成pyqtProperty方法

2024-10-04 03:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

class Channel(QObject):
    nameChanged = pyqtSignal()

    def __init__(self, props, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._name = props["name"]

    @pyqtProperty("QString", notify=nameChanged)
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name
        self.nameChanged.emit()

这非常适合我当前的(原型)需求。但是假设props将有更多的键,我也有兴趣将它们作为pyqtPrierty。在

有没有方法可以为props中的所有键生成setter和属性方法?在


Tags: 方法代码nameselfinitdefchannelargs
1条回答
网友
1楼 · 发布于 2024-10-04 03:17:59

解决方案是动态生成新类型:

from PyQt5.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject

def getter(name):

    def wrapped(self):
        return self._proxy[name]
    return wrapped


def setter(name):
    def wrapped(self,v):
        self._proxy[name] = v
        getattr(self,'proxy_changed').emit()
    return wrapped


def dict2props(data):
    on_changed = pyqtSignal()
    r = {
        '_proxy': data,
        'proxy_changed': on_changed
        }

    for k in data:
        typ = type(data[k])
        setter.__name__ = "set_"+k
        getter.__name__ = "get_"+k
        r[k] = pyqtProperty(typ, fget=getter(k), fset=setter(k), notify=on_changed)
    return r



settings = {'as':12}
settingsproxy = type('Settings', (QObject,), dict2props(settings))()

信号未测试(将编辑答案,然后完成)。我对所有属性使用公共信号。 但它也可以生成。在

^{pr2}$

相关问题 更多 >