pyq5 QTreeView 树形目录结构
  HvTJUzsxOBtS 2023年11月25日 27 0



文章目录

  • 1、简介
  • 2、简单实例显示本机文件结构
  • 1)显示本机文件结构目录
  • 2)功能实现
  • 3、显示自定义文件结构
  • 1)展示
  • 2)功能代码
  • 4、添加展开文件的点击事件
  • 1)展示
  • 2)、功能展示
  • 5、文件节点的增删改
  • 1)展示
  • 2)、功能实现


1、简介

QTreeWidget 类实现了树形结构。

2、简单实例显示本机文件结构
1)显示本机文件结构目录

pyq5  QTreeView 树形目录结构_文件结构

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)展示

pyq5  QTreeView 树形目录结构_QTreeView_02

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)展示

pyq5  QTreeView 树形目录结构_d3_03

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)展示

pyq5  QTreeView 树形目录结构_文件结构_04

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 快速开发与实践

本人郑重声明,本博客所著文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若以上文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
HvTJUzsxOBtS