向 QCheckBox 小部件添加自定义属性

Nic*_*iem 5 pyqt qwidget attr

我(我认为)有一个简单的问题,但没有太多运气试图找到答案。pyqt 真的很新!

我根据多种因素动态地将许多 QtGui.QCheckBox() 小部件添加到 gridLayout 中。我的问题是,如何向每个 chkbox 小部件添加自定义属性?我想在每个 qt 小部件中存储一些自定义的东西。

谢谢你的帮助。一个基本的例子是最有用的。

干杯

use*_*816 9

您还可以使用该.setProperty()方法,也称为动态属性:

self.the_wdiget.setProperty("my_string", "hello")
self.the_wdiget.setProperty("my_bool", True)
self.the_wdiget.setProperty("my_int", 10)
self.the_wdiget.setProperty("my_stringList", ['sl1', 'sl2', 'sl3'])

# And get it by:

self.the_widget.property("my_bool") # etc.
Run Code Online (Sandbox Code Playgroud)

字符串也可以设置为可翻译。例如

self.the_widget.setProperty("my_string", _translate("Dialog", "hello"))
Run Code Online (Sandbox Code Playgroud)

http://doc.qt.io/qt-5/qobject.html#setProperty

另请参阅:

http://pyqt.sourceforge.net/Docs/PyQt5/qt_properties.html


thr*_*les 2

您可以直接对该QCheckBox类进行子类化。例如:

class MyCheckBox(QtGui.QCheckBox):
    def __init__(self, my_param, *args, **kwargs):
        QtGui.QCheckBox.__init__(self, *args, **kwargs)
        self.custom_param = my_param
Run Code Online (Sandbox Code Playgroud)

这里我们重写了__init__实例化类时自动调用的方法。我们my_param向签名添加一个额外的参数,然后收集在args和中指定的所有参数和关键字参数kwargs

在我们的新__init__方法中,我们首先调用原始方法QCheckBox.__init__,传递对新对象的引用self,并将参数解包为我们捕获的关键字参数。然后,我们将传递的新参数保存在实例属性中。

现在您有了这个新类,如果您之前通过调用创建(实例化)复选框,那么x = QtGui.QCheckBox('text, parent)您现在将调用x = MyCheckBox(my_param, 'text', parent)并且可以通过 访问您的参数x.custom_param