2011-03-12 103 views
1

我想子類化QTableWidgetItem,以便我的子類可以有一個額外的'id'屬性。PyQt子類的初始化方法QTableWidgetItem

不幸的是,我有點困惑,因爲PyQt的文檔here顯示四個不同初始化方法。

創建自己的初始化我「QTableWidgetItemWithId」子類方法(這也將傳遞一個額外的「身份證」的說法),我應該使用*指定參數時,** kwargs?如果是這樣,那麼正確的語法是什麼?

非常感謝

回答

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) 
+0

感謝您的支持。 – Kim 2011-03-13 12:50:13

1

我相信,因爲它適合你,你可以定義爲許多構造你的小部件項目。重寫的基本方法是clone

Qt擁有一個自定義QTableWidgetItem後裔在這裏演示項目:Spreadsheet定製QTableWidgetItem定義如下:spreadsheetitem.h

希望這會有所幫助,至於

+0

謝謝。我會看看這個。 – Kim 2011-03-13 12:48:41