【发布时间】:2015-06-04 19:46:36
【问题描述】:
我有(我认为)一个简单的问题,但没有太多运气试图找到答案。对 pyqt 来说真的很陌生!
我根据许多因素动态地将许多 QtGui.QCheckBox() 小部件添加到 gridLayout。我的问题是,如何为每个 chkbox 小部件添加自定义属性?我想在每个 qt 小部件中存储一些自定义的东西。
感谢您的帮助。一个基本的例子将是最有用的。
干杯
【问题讨论】:
我有(我认为)一个简单的问题,但没有太多运气试图找到答案。对 pyqt 来说真的很陌生!
我根据许多因素动态地将许多 QtGui.QCheckBox() 小部件添加到 gridLayout。我的问题是,如何为每个 chkbox 小部件添加自定义属性?我想在每个 qt 小部件中存储一些自定义的东西。
感谢您的帮助。一个基本的例子将是最有用的。
干杯
【问题讨论】:
您也可以使用.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
另见:
【讨论】:
您可以只继承 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,然后收集指定到args 和kwargs 中的任何参数和关键字参数。
在我们的新__init__ 方法中,我们首先调用原始QCheckBox.__init__,传递对新对象self 的引用,解包参数是我们捕获的关键字参数。然后我们保存在实例属性中传递的新参数。
现在您有了这个新类,如果您之前通过调用 x = QtGui.QCheckBox('text, parent) 创建(实例化)复选框,您现在将调用 x = MyCheckBox(my_param, 'text', parent) 并且您可以通过 x.custom_param 访问您的参数。
【讨论】: