当前位置:   article > 正文

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

pyqt qtreewidgetitem 自定义

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

一、类继承关系图

二、常用方法与信号

(一) 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对象,短短几句,已经可以将一个大致的树形框架显示出来了。

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

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

(一)设置整个树的大小

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

self.tree.resize(300,600)

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

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

(三)节点的展开技巧

1. 节点全部展开

self.tree.expandAll()

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

2.指定节点展开

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

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

四、QTreeWidgetItem

(一)双击条目可编 辑

  1. self.tree.itemDoubleClicked.connect(self.edit_Item)
  2. def edit_Item(self):
  3. item = self.tree.selectedItems()
  4. print(item)
  5. if item:
  6. item = item[0]
  7. item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsEditable)

实现的功能如下:

(二)设置条目的行高

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

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

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

  1. item_font = QFont()
  2. item_font.setFamily('微软雅黑')
  3. item_font.setPointSize(14) # 设置字号大小
  4. Item.setFont(0, item_font)

setFont(0,font)参数意义:

官方文档中是这样定义的

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

实现效果如下:

五、对树的各种设置

(一)设置弹出菜单

1.打开弹出菜单模式

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

2. 连接弹出菜点信号

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

3. 自定义弹出菜单

  1. def show_context_menu(self, pos):
  2. menu = QMenu(self)
  3. action = menu.addAction('添加人员')
  4. action.triggered.connect(self.addNode)
  5. action = menu.addAction('修改人员')
  6. action.triggered.connect(self.updateNode)
  7. action = menu.addAction('删除人员')
  8. action.triggered.connect(self.deleteNode)
  9. menu.exec_(QCursor.pos())
'
运行

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

  1. # 添加人员
  2. def addNode(self):
  3. print('添加节点')
  4. item = self.tree.currentItem()
  5. print(item)
  6. node = QTreeWidgetItem(item)
  7. node.setText(0, '新人')
  8. node.setText(1, '新值')
'
运行

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

(二)节点的拖拽功能

 打开拖拽模式

  1. # 打开拖拽模式
  2. self.tree.setDragDropMode(QAbstractItemView.InternalMove)

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

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

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

(三)设置节点内容

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

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

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

xml信息如下:

程序实现的结果如下:

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

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号