PyQt QTableWidgetItem子类的初始化方法

1 投票
2 回答
1594 浏览
提问于 2025-04-16 13:34

我想要创建一个叫做“QTableWidgetItemWithId”的类,这个类是从QTableWidgetItem派生出来的,目的是让它多一个“id”属性。

不过,我有点困惑,因为PyQt的文档这里显示了四种不同的init方法。

为了给我的“QTableWidgetItemWithId”类创建一个自己的init方法(这个方法还需要接收一个额外的“id”参数),我应该使用*args和**kwargs吗?如果是的话,正确的写法是什么呢?

非常感谢!

2 个回答

1

我觉得你可以根据自己的需要为你的小部件定义尽可能多的构造函数。最重要的方法是要重写 clone 方法。

Qt 有一个演示项目,里面有一个自定义的 QTableWidgetItem,地址在这里: Spreadsheet,自定义的 QTableWidgetItem 定义在这里: spreadsheetitem.h

希望这对你有帮助,祝好!

3

我觉得这有点儿看个人喜好,主要是你觉得什么样的代码好读,还有你希望你的子类有多灵活。你可以在构造函数里添加你想要的任何内容,然后只把需要的部分传给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)  

撰写回答