轉載:loster_Li
QTreeWidget的繼承關系如下圖:

因為繼承關系是 QAbstractItemView->QTreeView->QTreeWidget ,所以和QTableWidget很多地方是類似的。
如果需要特定的模式,如顯示硬盤信息及內部文件的 dir模式等,都需要用QTreeView,而不是用 QTreeWidget。和 QTableWidget類似,一般步驟是先創建一個 QTreeWidget實例,然后設置列數,然后再添加 。
1 import sys 2 from PyQt4.QtGui import * 3 4 5 class TreeWidget(QMainWindow): 6 def __init__(self): 7 super(TreeWidget, self).__init__() 8 self.setWindowTitle('TreeWidget') 9 self.tree = QTreeWidget() # 實例化一個TreeWidget對象 10 self.tree.setColumnCount(2) # 設置部件的列數為2 11 self.tree.setHeaderLabels(['Key', 'Value']) # 設置頭部信息對應列的標識符 12 13 # 設置root為self.tree的子樹,故root是根節點 14 root = QTreeWidgetItem(self.tree) 15 root.setText(0, 'root') # 設置根節點的名稱 16 17 # 為root節點設置子結點 18 child1 = QTreeWidgetItem(root) 19 child1.setText(0, 'child1') 20 child1.setText(1, 'name1') 21 child2 = QTreeWidgetItem(root) 22 child2.setText(0, 'child2') 23 child2.setText(1, 'name2') 24 child3 = QTreeWidgetItem(root) 25 child3.setText(0, 'child3') 26 child4 = QTreeWidgetItem(child3) 27 child4.setText(0, 'child4') 28 child4.setText(1, 'name4') 29 30 self.tree.addTopLevelItem(root) 31 self.setCentralWidget(self.tree) # 將tree部件設置為該窗口的核心框架 32 33 app = QApplication(sys.argv) 34 app.aboutToQuit.connect(app.deleteLater) 35 tp = TreeWidget() 36 tp.show() 37 app.exec_()
運行結果如下:

其中的 QtreeWidgetItem就是一一的添加的,其實還是不太方便的。
在應用程序中一般不是這樣來創建 QTreeView的,特別是比較復雜的Tree,一般都是通過QTreeView來實現而不是QTreeWidget來實現的。
這種與 QTreeWidget最大的區別就是,我們自己來定制模式,當然也有些系統提供給我們的模式,比如我們的文件系統盤的樹列表,比如下面的:
1 import sys 2 from PyQt4 import QtGui 3 4 5 # 直接運行程序時的入口 6 if __name__ == "__main__": 7 app = QtGui.QApplication(sys.argv) 8 app.aboutToQuit.connect(app.deleteLater) 9 10 model = QtGui.QDirModel() # Windows系統提供的模式 11 tree = QtGui.QTreeView() # 實例化一個QtreeView對象 12 tree.setModel(model) # 為部件添加模式 13 tree.setWindowTitle(tree.tr("Dir View")) 14 tree.resize(640, 480) 15 tree.show() 16 sys.exit(app.exec_())
運行結果如下:
一般的話model = TreeModel(需要處理的數據)可以讓我們自己定制如何顯示數據,其中的TreeModel類是我們自己寫的,可以查閱相關資料。
