注意,本文比较简单粗暴,都是干货,虽然标题上是使用详解,但没有什么过多的原理与解释,拿来就能使用,建议先收藏后再看。
一、类继承关系图
二、常用方法与信号
(一) 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
收集整理不易,您的一键三连是对我的最大支持!