【问题标题】:Add custom attribute to QCheckBox widget将自定义属性添加到 QCheckBox 小部件
【发布时间】:2015-06-04 19:46:36
【问题描述】:

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

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

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

干杯

【问题讨论】:

    标签: pyqt attr qwidget


    【解决方案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

    【讨论】:

      【解决方案2】:

      您可以只继承 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 访问您的参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-08
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        相关资源
        最近更新 更多