首页 文章

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

提问于
浏览
2

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

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

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

干杯

2 回答

  • 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) 并且可以通过 x.custom_param 访问您的参数 .

  • 1

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

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

    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

相关问题