将自定义属性添加到QCheckBox小部件

时间:2015-06-04 19:46:36

标签: pyqt attr qwidget

我(我认为)是一个简单的问题,但尝试寻找答案却没有多少运气。对pyqt来说真的很新!

我基于许多因素动态地将多个QtGui.QCheckBox()小部件添加到gridLayout。我的问题是,如何为每个chkbox小部件添加自定义attr?我想在每个qt小部件中存储一些自定义内容。

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

干杯

2 个答案:

答案 0 :(得分:2)

您还可以使用.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.

字符串也可以设置为可翻译。 E.g。

self.the_widget.setProperty("my_string", _translate("Dialog", "hello"))

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

另见:

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

答案 1 :(得分:1)

您可以只继承QCheckBox类。例如:

class MyCheckBox(QtGui.QCheckBox):
    def __init__(self, my_param, *args, **kwargs):
        QtGui.QCheckBox.__init__(self, *args, **kwargs)
        self.custom_param = my_param

这里我们覆盖实例化类时自动调用的__init__方法。我们在签名中添加一个额外的参数my_param,然后收集指定到argskwargs的任何参数和关键字参数。

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

现在您有了这个新课程,如果您之前通过拨打x = QtGui.QCheckBox('text, parent)创建了(实例化)复选框,那么现在可以致电x = MyCheckBox(my_param, 'text', parent),您可以通过{{1}访问您的参数}。