我有一个实例..
groupCell = QtGui.QGroupBox()
print groupCell.title() #this class has a method title()
我无法更改此实例的任何内容,它是如何实现的......
我需要扩展这个实例(添加一些方法等)。
class GroupBoxWithCheckbox (QtGui.QGroupBox):
def __init__(self, basegroupbox, checkbox):
#something like self = basegroupbox ?
self.checkbox = checkbox
def method(self):
pass
最后
groupCellWithCheckBox = GroupBoxWithCheckbox(groupCell, checkbox)
print groupCellWithCheckBox.title()
我必须获得与groupCell相同的标题。
答案 0 :(得分:1)
您可以定义一个扩展QtGui.QGroupBox
的新类,如下所示:
class GroupBoxWithCheckbox(QtGui.QGroupBox):
def __init__(self, checkbox):
super(GroupBoxWithCheckbox, self).__init__()
self.checkbox = checkbox
def method(self):
pass
然后,您只需将groupCell
作为此类的实例,并在初始化时传入一个复选框:
groupCell = GroupBoxWithCheckbox(checkbox)
这将与您在此处尝试的效果相同。
编辑,因为已提供新信息:
由于我们在这里谈论Python,您可以动态地将内容添加到您想要的任何实例中。完全可以这样做:
groupCell.checkbox = checkbox
即使groupCell没有复选框属性。设置时会添加该属性,如上面的代码段所示。你可以用它来做你想做的事。这有点奇怪,我不推荐它,但会工作。另一种方法是创建某种包装类:
class GroupBoxWithCheckbox(object):
def __init__(self, groupbox, checkbox):
self.groupbox = groupbox
self.checkbox = checkbox
groupCell = GroupBoxWithCheckbox(groupCell, checkbox)
然后,只要您想要访问原始GroupBox的方法,就可以执行类似
的操作groupCell.groupbox.title()
groupCell.groupbox
将包含原始GroupBox所有方法的所有,但您也可以访问groupCell.checkbox
。
后者的解决方案是我在编写此代码时要实现的。
答案 1 :(得分:0)
使用super
调用基类构造函数:
class GroupBoxWithCheckbox(QtGui.QGroupBox):
def __init__(self, basegroupbox, checkbox):
super(GroupBoxWithCheckbox, self).__init__()
self.checkbox = checkbox
self.basegroupbox = basegroupbox
def title(self):
return self.basegroupbox.title()