pyq5 QTreeView 树形目录结构
文章目录
1、简介
QTreeWidget 类实现了树形结构。
2、简单实例显示本机文件结构
1)显示本机文件结构目录
2)功能实现
#!/usr/bin/env python3
'''
【简介】
PyQT5中 QTreeView 例子
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
if __name__ == '__main__':
app = QApplication(sys.argv)
#Window系统提供的模式
model = QDirModel()
#创建一个QtreeView部件
tree = QTreeView()
#为部件添加模式
tree.setModel(model)
tree.setWindowTitle( "QTreeView 例子" )
tree.resize(640, 480)
tree.show()
sys.exit(app.exec_())
3、显示自定义文件结构
1)展示
2)功能代码
#!/usr/bin/env python3
'''
【简介】
PyQT5中 QTreeWidget 例子
'''
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon , QBrush , QColor
from PyQt5.QtCore import Qt
class TreeWidgetDemo(QMainWindow):
def __init__(self,parent=None):
super(TreeWidgetDemo,self).__init__(parent)
self.setWindowTitle('TreeWidget 例子')
self.tree = QTreeWidget()
# 设置列数
self.tree.setColumnCount(2)
# 设置头的标题
self.tree.setHeaderLabels(['Key','Value'])
# 设置根节点
root= QTreeWidgetItem(self.tree)
root.setText(0,'root')
root.setIcon(0,QIcon("./images/root.png"))
# 设置列宽
self.tree.setColumnWidth(0, 150)
### 设置节点的背景颜色
#brush_red = QBrush(Qt.red)
#root.setBackground(0, brush_red)
#brush_green = QBrush(Qt.green)
#root.setBackground(1, brush_green)
# 设置子节点1
child1 = QTreeWidgetItem(root)
child1.setText(0,'child1')
child1.setText(1,'ios')
child1.setIcon(0,QIcon("./images/IOS.png"))
child1.setCheckState(0, Qt.Checked) #设置选项已被选中状态
# 设置子节点2
child2 = QTreeWidgetItem(root)
child2.setText(0,'child2')
child2.setText(1,'')
child2.setIcon(0,QIcon("./images/android.png"))
# 设置子节点3,子节点2的子节点
child3 = QTreeWidgetItem(child2)
child3.setText(0,'child3')
child3.setText(1,'android')
child3.setIcon(0,QIcon("./images/music.png"))
#为tree增加顶级项目
self.tree.addTopLevelItem(root)
# 结点全部展开
self.tree.expandAll()
self.setCentralWidget(self.tree)
if __name__ == '__main__':
app = QApplication(sys.argv)
tree = TreeWidgetDemo()
tree.show()
sys.exit(app.exec_())
4、添加展开文件的点击事件
1)展示
2)、功能展示
#!/usr/bin/env python3
'''
【简介】
PyQT5中 QTreeWidget 例子
'''
from PyQt5.QtWidgets import *
import sys
class TreeWidgetDemo(QMainWindow):
def __init__(self,parent=None):
super(TreeWidgetDemo,self).__init__(parent)
self.setWindowTitle('TreeWidget 例子')
self.tree = QTreeWidget()
# 设置列数
self.tree.setColumnCount(2)
# 设置头的标题
self.tree.setHeaderLabels(['Key','Value'])
root= QTreeWidgetItem(self.tree)
root.setText(0,'root')
root.setText(1,'0')
child1 = QTreeWidgetItem(root)
child1.setText(0,'child1')
child1.setText(1,'1')
child2 = QTreeWidgetItem(root)
child2.setText(0,'child2')
child2.setText(1,'2')
child3 = QTreeWidgetItem(root)
child3.setText(0,'child3')
child3.setText(1,'3')
child4 = QTreeWidgetItem(child3)
child4.setText(0,'child4')
child4.setText(1,'4')
child5 = QTreeWidgetItem(child3)
child5.setText(0,'child5')
child5.setText(1,'5')
self.tree.addTopLevelItem(root)
self.tree.clicked.connect( self.onTreeClicked ) #绑定点击事件
self.setCentralWidget(self.tree)
def onTreeClicked(self, qmodelindex):
item = self.tree.currentItem()
print("key=%s ,value=%s" % (item.text(0), item.text(1)))
if __name__ == '__main__':
app = QApplication(sys.argv)
tree = TreeWidgetDemo()
tree.show()
sys.exit(app.exec_())
5、文件节点的增删改
1)展示
2)、功能实现
#!/usr/bin/env python3
'''
【简介】
PyQT5中 QTreeWidget 例子
'''
import sys
from PyQt5.QtWidgets import *
#from PyQt5.QtGui import QIcon , QBrush , QColor
#from PyQt5.QtCore import Qt
class TreeWidgetDemo(QWidget):
def __init__(self,parent=None):
super(TreeWidgetDemo,self).__init__(parent)
self.setWindowTitle('TreeWidget 例子')
operatorLayout = QHBoxLayout()
addBtn = QPushButton("添加节点")
updateBtn = QPushButton("修改节点")
delBtn = QPushButton("删除节点")
operatorLayout.addWidget(addBtn)
operatorLayout.addWidget(updateBtn)
operatorLayout.addWidget(delBtn)
# 按钮的信号槽连接
addBtn.clicked.connect(self.addTreeNodeBtn )
updateBtn.clicked.connect(self.updateTreeNodeBtn )
delBtn.clicked.connect(self.delTreeNodeBtn )
self.tree = QTreeWidget(self)
# 设置列数
self.tree.setColumnCount(2)
# 设置头的标题
self.tree.setHeaderLabels(['Key','Value'])
root= QTreeWidgetItem(self.tree)
root.setText(0,'root')
root.setText(1,'0')
child1 = QTreeWidgetItem(root)
child1.setText(0,'child1')
child1.setText(1,'1')
child2 = QTreeWidgetItem(root)
child2.setText(0,'child2')
child2.setText(1,'2')
child3 = QTreeWidgetItem(root)
child3.setText(0,'child3')
child3.setText(1,'3')
child4 = QTreeWidgetItem(child3)
child4.setText(0,'child4')
child4.setText(1,'4')
child5 = QTreeWidgetItem(child3)
child5.setText(0,'child5')
child5.setText(1,'5')
self.tree.addTopLevelItem(root)
self.tree.clicked.connect( self.onTreeClicked )
mainLayout = QVBoxLayout(self);
mainLayout.addLayout(operatorLayout);
mainLayout.addWidget(self.tree);
self.setLayout(mainLayout)
#节点点击事件
def onTreeClicked(self, qmodelindex):
item = self.tree.currentItem()
print("key=%s ,value=%s" % (item.text(0), item.text(1)))
#添加节点
def addTreeNodeBtn(self):
print('--- addTreeNodeBtn ---')
item = self.tree.currentItem()
node = QTreeWidgetItem(item)
node.setText(0,'newNode')
node.setText(1,'10')
# 节点更新
def updateTreeNodeBtn(self):
print('--- updateTreeNodeBtn ---')
item = self.tree.currentItem()
item.setText(0,'updateNode')
item.setText(1,'20')
#删除节点
def delTreeNodeBtn(self):
print('--- delTreeNodeBtn ---')
item = self.tree.currentItem()
root = self.tree.invisibleRootItem()
for item in self.tree.selectedItems():
(item.parent() or root).removeChild(item)
if __name__ == '__main__':
app = QApplication(sys.argv)
tree = TreeWidgetDemo()
tree.show()
sys.exit(app.exec_())
文件参考:
PyQt 快速开发与实践
本人郑重声明,本博客所著文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若以上文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。