1. 程式人生 > 實用技巧 >《轉》PyQt4 動態新增treeWidget 的列表項

《轉》PyQt4 動態新增treeWidget 的列表項

>>> hot3.png

作者原地址 :http://blog.sina.com.cn/s/blog_4b5039210100h6co.html

參考資料:Qt documentation online(因為這個幫助文件是基於C++做的,裡面的語句是C++寫的,不過因為PyQt做了很好的移植,方法的名稱,引數等等基本都可以在python中套用)

QTreeWidget的繼承關係如下圖:

PyQt學習筆記(16)——QTreeWidget

The QTreeWidget class provides a tree view that uses a predefinedtree model.

因為繼承關係是QAbstractItemView->QTreeView->QTreeWidget,所以和QTableWidget很多地方是類似的。

如果需要特殊的模式,比如顯示硬碟資訊及內部檔案的dir模式等,都需要用QTreeView,而不是用QTreeWidget。

和QTableWidget類似,一般步驟是先建立一個QTreeWidget例項,然後設定列數,

然後再新增頭。

# !/usr/bin/python

import sys

from PyQt4.QtGui import *

from PyQt4.QtCore import *

class TreeWidget(QMainWindow):

def __init__(self,parent=None):

QWidget.__init__(self,parent)

self.setWindowTitle('TreeWidget')

self.tree = QTreeWidget()

self.tree.setColumnCount(2)

self.tree.setHeaderLabels(['Key','Value'])

root= QTreeWidgetItem(self.tree)

root.setText(0,'root')

child1 = QTreeWidgetItem(root)

child1.setText(0,'child1')

child1.setText(1,'name1')

child2 = QTreeWidgetItem(root)

child2.setText(0,'child2')

child2.setText(1,'name2')

child3 = QTreeWidgetItem(root)

child3.setText(0,'child3')

child4 = QTreeWidgetItem(child3)

child4.setText(0,'child4')

child4.setText(1,'name4')

self.tree.addTopLevelItem(root)

self.setCentralWidget(self.tree)

app = QApplication(sys.argv)

tp = TreeWidget()

tp.show()

app.exec_()

結果如下

PyQt學習筆記(16)——QTreeWidget



其中的QtreeWidgetItem就是一層層的新增的,其實還是不太方便的。

在應用程式中一般不是這樣來建立QTreeView的,特別是比較複雜的Tree,一般都是通過QTreeView來實現而不是QTreeWidget來實現的。

這種與QTreeWidget最大的區別就是,我們自己來定製模式,當然也有些系統提供給我們的模式,比如我們的檔案系統盤的樹列表,比如下面的:

import sys

from PyQt4 importQtCore, QtGui

if __name__ =="__main__":

app = QtGui.QApplication(sys.argv)

model = QtGui.QDirModel()#系統給我們提供的

tree = QtGui.QTreeView()

tree.setModel(model)

tree.setWindowTitle(tree.tr("Dir View"))

tree.resize(640, 480)

tree.show()

sys.exit(app.exec_())

結果如下所示:

PyQt學習筆記(16)——QTreeWidget

所以一般的我們自己定製模式,步驟如下:

import sys

from PyQt4 import QtCore, QtGui

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

model = TreeModel(需要處理的資料)

view = QtGui.QTreeView()

view.setModel(model)

view.setWindowTitle("Simple Tree Model")

view.show()

sys.exit(app.exec_())

其中的TreeModel類是我們自己寫的,如何顯示我們的資料,可以檢視相關資料。

我的更多文章:

轉載於:https://my.oschina.net/shadai/blog/698951