在PyQt中命名getter和属性

2 投票
1 回答
1570 浏览
提问于 2025-04-17 09:26

我有一个用PyQt4写的自定义小部件:

class WRecordIdWidget(QtGui.QLineEdit):

    ....

    def model(self):
        return self._model
    def setModel(self, model):
        self._model = model
    model = QtCore.pyqtProperty(str, model, setModel)

我创建了一个叫做model的pyqt属性,这样就可以在Qt Designer中编辑它。

我根据Qt的编码标准把获取这个属性的函数命名为model()。但是这个属性也叫model,这就导致了函数名被遮盖。

所以在Qt Designer中会看到model这个属性,但我在Qt中就不能再调用这个获取函数了——调用widget.model()会报错。我不知道C++是怎么处理这个问题的,为什么在C++中获取函数和Qt属性可以同名。

我是不是应该把获取函数改名为getModel()呢?这样的话就和其他“内置”的获取函数不太一致了……

1 个回答

1

只需要重命名它。当你执行 model = QtCore.pyqtProperty(str, model, setModel) 这行代码时,其实是在把类里面的一个获取值的方法(getter)替换成了一个属性,这样你就无法直接访问原来的那个方法了。

撰写回答