PyQt5之树形控件QTreeWidget使用详解 - 创建、增删节点、遍历、美化等常用功能案例解析_pyqt qtreewidgetitem 自定义-程序员宅基地

技术标签: 前端界面开发  python  ui  python中高级编程技巧  pyqt  前端  应用技巧  

注意,本文比较简单粗暴,都是干货,虽然标题上是使用详解,但没有什么过多的原理与解释,拿来就能使用,建议先收藏后再看。

一、类继承关系图

二、常用方法与信号

(一) QTreeWidget常用方法:        

1.QTreeWidget类中的常用方法

方法 描述
addTopLevelItem(item) QTreeWidget组件增加单个根节点item
addTopLevelItems(items) QTreeWidget组件增加多个根节点item
setHeaderLabels(labels) 设置标题列并为每个列设置标签
setColumnWidth(column, num) 设置列宽
setColumnCount() 设置树形部件的列数
setItemWidget(item,column,widget) 为指定列的item设置小部件
removeItemWidget() 移除指定条目和列的单元格处的小部件
itemWidget() 获取指定条目和列的单元格处的小部件
setCurrentItem() 设置当前条目
removeItemWidget(item,column) 为指定列的item删除小部件
insertTopLevelItem(index,item) 在索引位置插入单个根节点
insertTopLevelItems(index,items) 在索引位置插入多个根节点
takeTopLevelItem(index) 删除指定索引位置的根节点
findItems(text,flags[,column=0]) 使用给定的标志查找文本与字符串文本匹配的项目
currentItem() 返回当前item对象
columnCount() 返回所有列数
currentColumn() 返回当前项的列索引
setHeaderItem()  设置属性部件的表头,表头中每列的标签由条目中相应标签提供
setHeaderLable() 在表头添加一列,并为该列设置一个标签
headerItem() 返回标题项item对象
indexOfTopLevelItem(item) 返回给定根节点item的索引值
topLevelItem(index) 返回给定索引处的根节点item,如果该项目不存在,则返回None。
topLevelItemCount() 返回根节点item的数量。默认情况下,此属性的值为0。
selectedItems() 返回所有选定非隐藏项目的列表
isItemExpanded(item) 判断指定item根节点是否展开,返回bool
isItemHidden(item) 判断指定item根节点是否隐藏,返回bool
isItemSelected(item) 判断指定item根节点是否选择,返回bool
setSortingEnabled() 启用或禁用排序
isSortingEnabled() 是否启用了排序功能
clear() 清除其所有item
collapseItem()     折叠指定的条目
expandItem() 展开指定的条目

2. QTreeWidgetItem类中常用的方法

方法 描述
addChild(child) QTreeWidgetItem组件增加单个子节点item
addChildren(children) QTreeWidgetItem组件增加多个子节点item
setText(column,text) 设置文本名称为指定列的子节点item
setCheckState(column,state) 设置复选状态为指定列的子节点item
Qt.Checked:选中状态
Qt.PartiallyChecked:半选中状态
Qt.Unchecked:没有被选中
setIcon(column,icon) 设置图标为指定列的子节点item
setExpanded(expand) 设置子节点item为是否展开
setHidden(hide) 设置子节点item为是否隐藏
setSelected(select) 设置要选择的项目的选择状态
setFlags(flags) 设置列表项的项目标志设置为flags
setTextAlignment(column,alignment) 节点文本对齐方式
Qt.AlignLeft:将单元格内的内容沿单元格的左边缘对齐
Qt.AlignRight:将单元格内的内容沿单元格的右边缘对齐
Qt.AlignHCenter:在可用空间中,居中显示在水平方向上
Qt.AlignJustify:将文本在可用空间内对齐,默认从左到右
Qt.AlignTop:与顶部对齐
Qt.AlignBottom:与底部对齐
Qt.AlignVCenter:在可用空间中,居中显示在垂直方向上
Qt.AlignBaseline:与基线对齐
insertChild(index,child) 在索引位置插入单个子节点
insertChildren(index,children) 在索引位置插入多个子节点
takeChild(index) 删除索引处的子节点并返回它,否则返回0
takeChildren() 删除子级列表并返回它,否则返回一个空列表
removeChild(child) 删除指定的子节点item
parent() 返回项目的父项
treeWidget() 返回包含该项目的QTreeWidget
text(column) 返回指定列的文本值
indexOfChild(child) 返回给定子节点item的索引值
child(index) 返回指定索引的子节点item
childCount() 返回子节点的数量
columnCount() 返回子节点的列数
isDisabled() 判断该项是否被禁用,禁用则返回True;否则返回False。
isExpanded() 判断该项是否被展开,展开则返回True,否则返回False。
isHidden() 判断该项是否被隐藏,隐藏则返回True,否则返回False。
isSelected() 判断该项是否被选择,选择则返回True,否则返回False。

(二)QTreeWidget常用信号

信号 描述
itemClicked(item,column) 当用户单击item节点时,发出信号
itemDoubleClicked(item,column) 当用户双击item节点时,发出信号
itemChanged(item,column) 当指定节点中列的内容发生更改时,发出信号
currentItemChanged(current,previous) 当前节点更改时,发出信号
itemCollapsed(item) 折叠指定节点时,发出信号
itemExpanded(item) 展开指定节点时,发出信号
itemEntered(item,column) 当鼠标光标进入指定列上的项目时,发出信号
itemPressed(item,column) 用户在窗口内按下鼠标按钮时,发出信号
itemSelectionChanged() 当树构件中的选择发生变化时,发

三、创建树QTreeWidget

创建布局,创建QTreeWidget对象,短短几句,已经可以将一个大致的树形框架显示出来了。

layout = QVBoxLayout()
self.setLayout(layout)     
self.tree = QTreeWidget()        
layout.addWidget(self.tree)  # 将人员树加入布局 

对树的整体设置有以下几个要点:

(一)设置整个树的大小

将树的大小显示为宽300,高600的大小。

self.tree.resize(300,600)

(二)设置树的信息列数及每列宽度

self.tree.setColumnCount(2)      # 2列值的树
self.tree.setColumnWidth(0,300)  # 第1列宽度300

(三)节点的展开技巧

1. 节点全部展开

self.tree.expandAll()

这条命令一般在树形程序的结尾使用,使用这条指令后,整个树全部呈现展开状态,包括各个子节点。

2.指定节点展开

self.tree.expandItem(node)      # 展开添加的节点

使用这条指令后,直接展开添加的节点,便于对新添加的节点进行编辑。

四、QTreeWidgetItem

(一)双击条目可编 辑

self.tree.itemDoubleClicked.connect(self.edit_Item) 

def edit_Item(self):
        item = self.tree.selectedItems()
        print(item)
        if item:
            item = item[0] 
            item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable) 

实现的功能如下:

(二)设置条目的行高

item.setSizeHint(0, QSize(0, 30))

其中:0为行号,Qize(0,30)中0宽度,表示不控制,30表示高度

(三)设置条目中的字体及字的大小

item_font = QFont()
item_font.setFamily('微软雅黑')
item_font.setPointSize(14)  # 设置字号大小

Item.setFont(0, item_font)   

setFont(0,font)参数意义:

官方文档中是这样定义的

                 void QTreeWidgetItem::setFont(int column, const QFont &font)

实现效果如下:

五、对树的各种设置

(一)设置弹出菜单

1.打开弹出菜单模式

# 打开鼠标右键单击菜单
self.tree.setContextMenuPolicy(Qt.CustomContextMenu) 

2. 连接弹出菜点信号

self.tree.customContextMenuRequested.connect(self.show_context_menu)  # 绑定菜单

3. 自定义弹出菜单

def show_context_menu(self, pos):
        menu = QMenu(self)
        action = menu.addAction('添加人员')
        action.triggered.connect(self.addNode)
        action = menu.addAction('修改人员')
        action.triggered.connect(self.updateNode)
        action = menu.addAction('删除人员')
        action.triggered.connect(self.deleteNode)
        menu.exec_(QCursor.pos())

4. 自定主义弹出菜单每一项选中后的功能函数

# 添加人员
def addNode(self):
    print('添加节点')
    item = self.tree.currentItem()
    print(item)
    node = QTreeWidgetItem(item)
    node.setText(0, '新人')
    node.setText(1, '新值')

此处仅实例展示一个菜单功能函数。注意看第3步,弄清楚它是如何实现与信号的连接的。

(二)节点的拖拽功能

 打开拖拽模式

# 打开拖拽模式

self.tree.setDragDropMode(QAbstractItemView.InternalMove)

主要拖拽模式设置有以下几种:

                NoDragDrop,      不允许拖拽
                DragOnly,           只允许拖出
                DropOnly               只允许拽进
                DragDrop              允许拖出和拽进
                InternalMove         允许内部拖搜

拖动功能演示见 3-1 双击条目可编 辑

(三)设置节点内容

1.一般节点信息设置方法

这个要和QTreeWidgetItem控件配合使用。

rootItem = QTreeWidgetItem(self.tree)
rootItem.setText(0,'张公')
rootItem.setText(1,'1世')
2.通过读入xml文件实现信息写入的方法

xml信息如下:

程序实现的结果如下:

由于这部分内容涉及的知识点较多,后期我会专门写一篇文章进行详述。示例程序和数据文件,可以通过下载以下资源获得:https://download.csdn.net/download/qq_58168857/88591317?spm=1001.2014.3001.5503

收集整理不易,您的一键三连是对我的最大支持!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_58168857/article/details/133908187

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文

推荐文章

热门文章

相关标签