PyQt--QTreeWidget

来源:互联网 发布:nestopia mac装手柄 编辑:程序博客网 时间:2024/04/29 13:30

 QTreeWidget的继承关系如下图:


   因为继承关系是 QAbstractItemView->QTreeView->QTreeWidget  ,所以和QTableWidget很多地方是类似的。

   如果需要特定的模式,如显示硬盘信息及内部文件的 dir模式等,都需要用QTreeView,而不是用 QTreeWidget。和 QTableWidget类似,一般步骤是先创建一个  QTreeWidget实例,然后设置列数,然后再添加 。

  1. # !/usr/bin/python  
  2. import sys  
  3.   
  4. from PyQt4.QtGui import *  
  5. from PyQt4.QtCore import *  
  6.   
  7. class TreeWidget(QMainWindow):  
  8.     def __init__(self,parent=None):  
  9.         QWidget.__init__(self,parent)  
  10.           
  11.         self.setWindowTitle('TreeWidget')  
  12.         #创建一个Qtree部件  
  13.         self.tree = QTreeWidget()  
  14.         #设置部件的列数为2  
  15.         self.tree.setColumnCount(2)  
  16.         #设置头部信息,因为上面设置列数为2,所以要设置两个标识符  
  17.         self.tree.setHeaderLabels(['Key','Value'])  
  18.           
  19.         #设置root为self.tree的子树,所以root就是跟节点  
  20.         root= QTreeWidgetItem(self.tree)  
  21.         #设置根节点的名称  
  22.         root.setText(0,'root')  
  23.           
  24.         #为root节点设置子结点  
  25.         child1 = QTreeWidgetItem(root)  
  26.         child1.setText(0,'child1')  
  27.         child1.setText(1,'name1')  
  28.         child2 = QTreeWidgetItem(root)  
  29.         child2.setText(0,'child2')  
  30.         child2.setText(1,'name2')  
  31.         child3 = QTreeWidgetItem(root)  
  32.         child3.setText(0,'child3')  
  33.         child4 = QTreeWidgetItem(child3)  
  34.         child4.setText(0,'child4')  
  35.         child4.setText(1,'name4')  
  36.           
  37.         self.tree.addTopLevelItem(root)  
  38.         #将tree部件设置为该窗口的核心框架  
  39.         self.setCentralWidget(self.tree)  
  40.           
  41. app = QApplication(sys.argv)  
  42. app.aboutToQuit.connect(app.deleteLater)  
  43. tp = TreeWidget()  
  44. tp.show()  
  45. app.exec_()  
   运行结果如下:

   其中的 QtreeWidgetItem就是一一的添加的,其实还是不太方便的。在应用程序中一般不是这样来创建 QTreeView的,特别是比较复杂的Tree,一般都是通过QTreeView来实现而不是QTreeWidget来实现的。这种与 QTreeWidget最大的区别就是,我们自己来定制模式,当然也有些系统提供给我们的模式,比如我们的文件系统盘的树列表,比如下面的:
[python] view plain copy
  1. import sys  
  2. from PyQt4 import QtCore, QtGui  
  3. #直接运行程序时的入口  
  4. if __name__ == "__main__":  
  5.     app = QtGui.QApplication(sys.argv)  
  6.     app.aboutToQuit.connect(app.deleteLater)  
  7.     #Window系统提供的模式  
  8.     model = QtGui.QDirModel()  
  9.     #创建一个QtreeView部件  
  10.     tree = QtGui.QTreeView()  
  11.     #为部件添加模式  
  12.     tree.setModel(model)  
  13.     tree.setWindowTitle(tree.tr("Dir View"))  
  14.     tree.resize(640480)  
  15.     tree.show()  
  16.     sys.exit(app.exec_())  
   运行结果如下:
   一般的话model = TreeModel(需要处理的数据)可以让我们自己定制如何显示数据,其中的TreeModel类是我们自己写的,可以查阅相关资料。


原创粉丝点击