python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例


Posted in Python onMarch 02, 2020

PyQt5树形结构控件QTreeWidget简介

QTreeWidget 类根据预设的模型提供树形显示控件。

QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。

如果不需要灵活的“模型/视图”框架,可以使用QTreeWidget 来创建有层级关系的树形结构。当把标准 item 模型结合 QTreeView 使用时,可以得到更灵活的使用方法,从而把“数据”和“显示”分离开。

QTreeWidget类中的常用方法

方法 描述
setColumnWidth(int column,int width) 将指定列的宽度设置为给定的值
Column:指定的列
width:指定的宽度
insertTopLevelItems() 在视图的顶层索引中引入项目的列表
expandAll() 展开所有节点的树形节点
invisibleRootItem() 返回树形控件中不可见的根选项(Root Item)
selectionItems() 返回所有选定的非隐藏项目的列表内

QTreeWidgetItem类中常用的方法

方法 描述
addChild() 将子项追加到子列表中
setText() 设置显示的节点文本
Text() 返回显示的节点文本
setCheckState(column.state) 设置指定列的选中状态:
Qt.Checked:节点选中
Qt.Unchecked:节点没有选中
setIcon(column,icon) 在指定的列中显示图标

QTreeWidget树形结构控件的实例

树形结构是通过QTreeWidget和QTreeWidgetItem类实现的,其中QTreeWidgetItem类实现了节点的添加,其完整代码如下

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'))

    # todo 优化2 设置根节点的背景颜色
    brush_red=QBrush(Qt.red)
    root.setBackground(0,brush_red)
    brush_blue=QBrush(Qt.blue)
    root.setBackground(1,brush_blue)

    #设置树形控件的列的宽度
    self.tree.setColumnWidth(0,150)

    #设置子节点1
    child1=QTreeWidgetItem()
    child1.setText(0,'child1')
    child1.setText(1,'ios')
    child1.setIcon(0,QIcon('./images/IOS.png'))

    #todo 优化1 设置节点的状态
    child1.setCheckState(0,Qt.Checked)

    root.addChild(child1)


    #设置子节点2
    child2=QTreeWidgetItem(root)
    child2.setText(0,'child2')
    child2.setText(1,'')
    child2.setIcon(0,QIcon('./images/android.png'))

    #设置子节点3
    child3=QTreeWidgetItem(child2)
    child3.setText(0,'child3')
    child3.setText(1,'android')
    child3.setIcon(0,QIcon('./images/music.png'))



    #加载根节点的所有属性与子控件
    self.tree.addTopLevelItem(root)

    #TODO 优化3 给节点添加响应事件
    self.tree.clicked.connect(self.onClicked)


    #节点全部展开
    self.tree.expandAll()
    self.setCentralWidget(self.tree)

  def onClicked(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_())

初始运行图如下

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化一:设置节点的状态

这里添加了child1的选中状态

 child1.setCheckState(0,Qt.Checked)

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化二:设置节点的背景颜色

这里设置了根节点的背景颜色

brush_red=QBrush(Qt.red)

        root.setBackground(0,brush_red)

        brush_blue=QBrush(Qt.blue)

        root.setBackground(1,brush_blue)

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

优化三:给节点添加响应事件

点击,会在控制台输出当前地key值与value值

self.tree.clicked.connect(self.onClicked)

def onClicked(self,qmodeLindex):

        item=self.tree.currentItem()

        print('Key=%s,value=%s'%(item.text(0),item.text(1)))

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

系统定制模式实例

在上面的例子中,QTreeWidgetItem类的节点是一个个添加上去的,这样有时很不方便,特别是窗口产生比较复杂的树形结构时,一般都是通过QTreeView类来实现的,而不是QTreeWidget类,QTreeView和QTreeWidget类最大的区别就是,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_())

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

本文主要讲解了PyQt5树形结构控件QTreeWidget详细使用方法与实例,更多关于PyQt5控件使用知识请查看下面的相关链接

Python 相关文章推荐
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
Python实现最大子序和的方法示例
Jul 05 Python
python数据归一化及三种方法详解
Aug 06 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
Nov 04 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
python Shapely使用指南详解
Feb 18 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
Jun 15 Python
Python处理mysql特殊字符的问题
Mar 02 #Python
新手入门学习python Numpy基础操作
Mar 02 #Python
python中数据库like模糊查询方式
Mar 02 #Python
python读取文件指定行内容实例讲解
Mar 02 #Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 #Python
python判断两个序列的成员是否一样的实例代码
Mar 01 #Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 #Python
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
Bootstrap treeview实现动态加载数据并添加快捷搜索功能
2018/01/07 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
Python设计模式之观察者模式实例
2014/04/26 Python
python中self原理实例分析
2015/04/30 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python之reload流程实例代码解析
2018/01/29 Python
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
大学总结自我鉴定
2014/01/18 职场文书
运动会演讲稿
2014/05/07 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
网络舆情信息简报
2015/07/21 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript
业余无线电通联Q语
2022/02/18 无线电