《轉》PyQt4 動態新增treeWidget 的列表項
作者原地址 :http://blog.sina.com.cn/s/blog_4b5039210100h6co.html
參考資料:Qt documentation online(因為這個幫助文件是基於C++做的,裡面的語句是C++寫的,不過因為PyQt做了很好的移植,方法的名稱,引數等等基本都可以在python中套用)
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_()
結果如下
其中的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_())
結果如下所示:
所以一般的我們自己定製模式,步驟如下:
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類是我們自己寫的,如何顯示我們的資料,可以檢視相關資料。
我的更多文章:- PyQt學習筆記(15)——QFileDialog(2010-03-09 09:01:38)
- PyQt學習筆記(14)——佈局管理(2010-03-08 09:32:35)
- PyQt學習筆記(12)——QSetting(2010-03-05 10:33:15)
- PyQt學習筆記(11)——QSplitter分割視窗(2010-03-04 09:03:28)
- PyQt學習筆記(10)——EventsandSignals(2010-03-03 17:56:59)
- PyQt學習筆記(9)——QtDesigner(3)(2010-02-20 12:29:30)
- PyQt學習筆記(8)——QtDesigner(2)(2010-02-20 12:22:13)
- PyQt學習筆記(7)——QtDesigner(1)(2010-02-20 12:13:33)
- PyQt學習筆記(6)——ActionsandKeySequences(2010-02-20 09:40:24)
- PyQt學習筆記(5)——MianWindow(2010-02-20 09:37:46)
轉載於:https://my.oschina.net/shadai/blog/698951