PyQt QTableWidgetItem的子类的Init方法

时间:2011-03-12 18:52:16

标签: python pyqt

我想继承QTableWidgetItem,以便我的子类可以有一个额外的'id'属性。

不幸的是,我有点困惑,因为PyQt文档here显示了四种不同的 init 方法。

要为我的“QTableWidgetItemWithId”子类创建我自己的 init 方法(它还会传递一个额外的'id'参数),我应该使用* args,** kwargs吗?如果是这样,那么正确的语法是什么?

非常感谢

2 个答案:

答案 0 :(得分:2)

我会说这取决于你的品味和你认为可读的东西,以及你想保留你的子类的灵活性。 您可以向构造函数添加任何您想要的内容,只需将QTableWidgetItem的构造函数需要。有很多方法可以做到这一点。我个人尽量避免使用* args和** kwargs。

from PyQt4.QtGui import QTableWidgetItem

class ATableWidgetItem(QTableWidgetItem):

    def __init__(self, id, *args, **kwargs):
        super(ATableWidgetItem, self).__init__(*args, **kwargs)
        self.id = id

a = ATableWidgetItem(0)
b = ATableWidgetItem(0, QTableWidgetItem.UserType)
c = ATableWidgetItem(0, "text", type=QTableWidgetItem.UserType) 

class AnotherTableWidgetItem(QTableWidgetItem):

    def __init__(self, id):
        super(AnotherTableWidgetItem, self).__init__()
        self.id = id

d = AnotherTableWidgetItem(0)

class YetAnotherTableWidgetItem(QTableWidgetItem):

    def __init__(self, id, text="", type=QTableWidgetItem.Type):
        super(YetAnotherTableWidgetItem, self).__init__(text, type)
        self.id = id

e = YetAnotherTableWidgetItem(0)
f = YetAnotherTableWidgetItem(0, "Hello")
g = YetAnotherTableWidgetItem(0, "Hello", QTableWidgetItem.UserType)  

答案 1 :(得分:1)

我相信您可以为您的小部件项目定义尽可能多的构造函数。覆盖的基本方法是clone

Qt有一个带有自定义QTableWidgetItem后代的演示项目:Spreadsheet,其中定义了自定义QTableWidgetItem:spreadsheetitem.h

希望这有帮助,尊重