12.4 PyQt5表格介绍【树控件】-QTreeView
itomcoil 2024-12-22 18:53 17 浏览
1.QTreeView简介
PyQt5中QTreeView用于展示层次结构的数据,比如文件系统目录、关系数据库中的树形结构等。
2.QTreeView案例
from PyQt5.QtWidgets import QApplication, QTreeView, QVBoxLayout, QWidget
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.Qt import QAbstractItemView
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QTreeView演示")
self.resize(600, 400)
# 创建 QTreeView 实例
self.tree_view = QTreeView()
# 创建数据模型
self.model = QStandardItemModel()
self.model.setHorizontalHeaderLabels(['名称', '描述'])
# 设置模型
self.tree_view.setModel(self.model)
# 设置根节点
root_node = self.model.invisibleRootItem()
# 添加数据
self.add_items(root_node)
self.tree_view.clicked.connect(self.clicked)
self.tree_view.doubleClicked.connect(self.double_clicked)
self.tree_view.expanded.connect(self.expanded)
# 布局
layout = QVBoxLayout(self)
layout.addWidget(self.tree_view)
def add_items(self, root_node):
# 添加第一层节点
item1 = QStandardItem('Item 1')
item2 = QStandardItem('Item 2')
# 为节点添加描述列
item1_desc = QStandardItem('Item 1 描述')
item2_desc = QStandardItem('Item 2 描述')
# 将节点添加到模型中
root_node.appendRow([item1, item1_desc])
root_node.appendRow([item2, item2_desc])
# 添加第二层节点
item1_child1 = QStandardItem('Item 1 Child 1')
item1_child2 = QStandardItem('Item 1 Child 2')
# 展开指定节点
# self.tree_view.expand(self.model.indexFromItem(item1))
# 为子节点添加描述列
item1_child1_desc = QStandardItem('Item 1 Child 1 描述')
item1_child2_desc = QStandardItem('Item 1 Child 2 描述')
# 将子节点添加到第一个节点下
item1.appendRow([item1_child1, item1_child1_desc])
item1.appendRow([item1_child2, item1_child2_desc])
def clicked(self, index):
print(self.tree_view.currentIndex())
print(self.model.data(index))
def double_clicked(self, index):
print(self.model.data(index))
def expanded(self, index):
print(self.model.data(index))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.运行结果
4.常用方法
方法 | 描述 |
setModel(model) | 设置模型: QStandardItemModel:通用的模型,适合大多数应用场景 QSqlTableModel:用于管理和显示数据库表的数据,通过PyQt5.QtSql导入 QSqlQueryModel:用于执行和显示 SQL 查询的结果,通过PyQt5.QtSql导入 QFileSystemModel:用于管理和显示文件系统的数据 |
model() | 获取 QTreeView 当前使用的数据模型 |
expandAll() | 展开所有项 |
collapseAll() | 折叠所有项 |
expand(const QModelIndex &index) | 展开指定索引对应的项,通过模型中的indexFromItem方法获取索引 |
collapse(const QModelIndex &index) | 折叠指定索引对应的项,通过模型中的indexFromItem方法获取索引 |
setRootIndex(const QModelIndex &index) | 设置视图的根索引,通过模型中的indexFromItem方法获取索引 |
rootIndex() | 返回当前的根索引 |
setUniformRowHeights(bool enable) | 设置是否使用统一的行高 |
uniformRowHeights() | 返回是否使用统一的行高 |
setAnimated(bool enable) | 设置是否启用动画 |
isAnimated() | 返回是否启用了动画 |
setSortingEnabled(bool enable) | 设置是否启用排序 |
isSortingEnabled() | 返回是否启用了排序 |
setAllColumnsShowFocus(bool show) | 设置当某一行获得焦点时,是否在所有列上都显示焦点矩形(即高亮显示整个行) |
allColumnsShowFocus() | 返回是否当某一行获得焦点时在所有列上显示焦点举行 |
setWordWrap(bool enable) | 设置是否启用文本换行 |
wordWrap() | 返回是否启用了文本换行 |
setIndentation(int indent | 设置缩进量(单位为像素) |
indentation() | 返回缩进量 |
header() | 获取QTreeView表头对象,可以对表头进一步详细设置: setStretchLastSection(Bool):设置最后一列是否自动拉伸以填满剩余空间 setVisible(Bool):设置表头是否可见 setDefaultAlignment(Qt.Alignment):设置表头项的默认对齐方式 setSectionsMovable(Bool):设置列是否可拖动重新排序 setHighlightSections(Bool):设置当选中某一列时,表头是否高亮显示该列 setSortIndicatorShown(Bool):设置是否显示排序指示器(一般用于表头) setSortIndicator(logicalIndex: int, order: Qt.SortOrder):设置某列为排序列,并指定升序或降序 resizeSection(logicalIndex: int, size: int):指定列的宽度 hideSection(alogicalIndex: int):隐藏指定行 showSection(alogicalIndex: int):显示指定行 |
setSelectionMode(mode) | 设置选择模式(单选、多选等): QAbstractItemView.NoSelection:不允许选择。 QAbstractItemView.SingleSelection:一次只允许选择一个单元格。 QAbstractItemView.MultiSelection:允许选择多个单元格。 QAbstractItemView.ExtendedSelection:允许使用 Shift 或 Ctrl 键进行扩展选择。 QAbstractItemView.ContiguousSelection:只允许选择连续的项目 |
selectionModel() | 返回视图的选择模型 |
currentIndex() | 返回当前选中的索引 |
setCurrentIndex(const QModelIndex &index) | 设置当前选中的索引 |
scrollTo(index, hint) | 滚动到指定的单元格 常用的滚动行为 (hint): QAbstractItemView.EnsureVisible:确保单元格可见 QAbstractItemView.PositionAtTop:滚动使单元格位于顶部 QAbstractItemView.PositionAtCenter:滚动使单元格位于中心 |
setRootIsDecorated(bool decorate) | 设置是否装饰根索引 |
rootIsDecorated() | 返回根索引是否被装饰 |
setAlternatingRowColors(bool enable) | 设置是否使用交替行颜色 |
alternatingRowColors() | 返回是否使用交替行颜色 |
setItemsExpandable(bool expandable) | 设置项是否可展开 |
isItemsExpandable() | 返回项是否可展开 |
setExpandsOnDoubleClick(bool expand) | 设置是否在双击时展开项 |
expandsOnDoubleClick() | 返回是否在双击时展开项 |
setEditTriggers(QAbstractItemView.EditTriggers) | QAbstractItemView.NoEditTriggers:禁止编辑 QAbstractItemView.DoubleClicked:双击编辑 QAbstractItemView.SelectedClicked:点击选中项时触发编辑 QAbstractItemView.AnyKeyPressed:按下任何键时触发编辑 QAbstractItemView.AllEditTriggers:启用所有编辑触发条件 组合触发条件时,条件之间用 | 隔开。 |
editTriggers() | 返回编辑触发器。 |
visualRect(const QModelIndex &index) | 返回给定索引在视图中的可视化矩形,通过模型中的indexFromItem方法获取索引 |
visualRegionForSelection(const QItemSelection &selection) | 返回给定选择在视图中的可视化区域,通过selectionModel().selection()获取 |
isPersistentEditorOpen(const QModelIndex &index) | 返回指定索引的编辑器是否持久打开,通过模型中的indexFromItem方法获取索引 |
closePersistentEditor(const QModelIndex &index) | 关闭指定索引的持久编辑器 |
openPersistentEditor(const QModelIndex &index) | 打开指定索引的持久编辑器 |
selectedIndexes() | 返回当前选择的所有索引 |
setHorizontalHeaderLabels(list) | 设置水平标题(列标题) |
4.常用信号
方法 | 描述 |
activated(const QModelIndex &index) | 当激活一个项时发出。通常是在双击一个项或者按 Enter 键时触发 |
clicked(const QModelIndex &index) | 当单击一个项时发出 |
doubleClicked(const QModelIndex &index) | 当双击一个项时发出 |
entered(const QModelIndex &index) | 当鼠标光标进入一个项时发出 |
expanded(const QModelIndex &index) | 当一个项被展开时发出 |
collapsed(const QModelIndex &index) | 当一个项被折叠时发出 |
pressed(const QModelIndex &index) | 当按下鼠标键时发出 |
viewportEntered() | 当鼠标光标进入视口时发出 |
rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) | 当模型即将从父索引删除一行或多行时发出 |
rowsInserted(const QModelIndex &parent, int start, int end) | 当模型插入一行或多行时发出 |
rowsRemoved(const QModelIndex &parent, int start, int end) | 当模型从父索引删除一行或多行时发出 |
dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) | 当模型中的数据发生改变时发出 |
headerDataChanged(Qt::Orientation orientation, int first, int last) | 当模型中的头部数据发生改变时发出 |
layoutChanged() | 当模型的布局发生改变时发出 |
modelReset() | 当模型重置时发出 |
modelAboutToBeReset() | 当模型即将重置时发出 |
selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) | 当选择发生变化时发出 |
currentChanged(const QModelIndex ¤t, const QModelIndex &previous) | 当前索引发生变化时发出 |
customContextMenuRequested(const QPoint &pos) | 当用户右击视图时发出,通常用于显示上下文菜单 |
相关推荐
- PS小技巧 调整命令,让人物肤色变得更加白皙 #后期修图
-
我们来看一下如何去将人物的皮肤变得更加的白皙。·首先选中图层,Ctrl键加J键复制一层。·打开这里的属性面板,选择快速操作删除背景,这样就会将人物进行单独的抠取。·接下来在上方去添加一个黑白调整图层,...
- 把人物肤色提亮的方法和技巧
-
PS后期调白肤色提亮照片的方法。一白遮百丑,所以对于Photoshop后期来说把人物肤色调白是一项非常重要的任务。就拿这张素材图片来说,这张素材图片人脸的肤色主要偏红、偏黄,也不够白皙,该怎样对它进行...
- 《Photoshop教程》把美女图片调成清爽色彩及润肤技巧
-
关注PS精品教程,每天不断更新~~室内人物图片一般会偏暗,人物脸部、肤色及背景会出现一些杂点。处理之前需要认真的给人物磨皮及美白,然后再整体润色。最终效果原图一、用修补工具及图章工具简单去除大一点的黑...
- PS后期对皮肤进行美白的技巧
-
PS后期进行皮肤美白的技巧。PS后期对皮肤进行美白的技巧:·打开素材图片之后直接复制原图。·接下来直接点击上方的图像,选择应用图像命令。·在通道这里直接选择红通道,混合这里直接选择柔光,然后点击确定。...
- 493 [PS调色]调模特通透肤色
-
效果对比:效果图吧:1、光位图:2、拍摄参数:·快门:160;光圈:8;ISO:1003、步骤分解图:用曲线调整图层调出基本色调。用可选颜色调整图层调整红色、黄色、白色和灰色4种颜色的混合比例。用色彩...
- 先选肤色再涂面部,卡戴珊的摄影师透露:为明星拍完照后怎么修图
-
据英国媒体12月17日报道,真人秀明星金·卡戴珊终于承认,她把女儿小北P进了家族的圣诞贺卡,怪不得粉丝们都表示这张贺卡照得非常失败。上周,这位39岁的女星遭到了一些粉丝针对这张照片的批评,她于当地时间...
- 如何在PS中运用曲线复制另一张照片的色调
-
怎样把另一张作品的外观感觉,套用到自己的照片上?单靠肉眼来猜,可能很不容易,而来自BenSecret的教学,关键是在PS使用了两个工具,让你可以准确比较两张照片的曝光、色调与饱和度,方便你调整及复制...
- PS在LAB模式下调出水嫩肤色的美女
-
本PS教程主要使用Photoshop使用LAB模式调出水嫩肤色的美女,教程调色比较独特。作者比较注重图片高光部分的颜色,增加质感及肤色调红润等都是在高光区域完成。尤其在Lab模式下,用高光选区调色后图...
- 在Photoshop图像后期处理中如何将人物皮肤处理得白皙通透
-
我们在人像后期处理中,需要将人物皮肤处理的白皙通透,处理方法很多,大多数都喜欢使用曲线、磨皮等进行调整,可以达到亮但是不透,最终效果往往不是很好,今天就教大家一种如何将任务皮肤处理得白皙通透,希望能帮...
- PS调色自学教程:宝宝照片快速调通透,简单实用!
-
PS调色自学教程:宝宝照片快速调通透。·首先复制图层,然后选择进入ACR滤镜,选择曲线锁定照片的亮部,也就高光位置,其他部位补亮一点,尤其是阴影的部位补亮多一些,让画面的层次均匀一点。·然后回到基本项...
- 【干货】如何利用PS进行人物美化
-
人物图像美化在Photoshop中非常常用,Photoshop作为一款功能强大的图像处理软件,不仅可以对人像进行基本的调色、美化和修复等处理,还可以改变人物的线条和幅度,如调整脸部器官和脸型的大小、调...
- 教大家一种可以快速把肤色处理均匀的方法@抖音短视频
-
快速把肤色处理均匀的方法。今天教大家一种可以快速把肤色处理均匀的方法。像这张照片整体肤色走紫红色,但是局部偏黄缘处理起来非常的麻烦。其实我们只需要新建空白图层,图层混合模式更改为颜色,再选择画笔工具把...
- PS调色教程 利用RAW调出干净通透的肤色
-
要么不发,要么干货。后期教程来噜~用RAW调出干净通透的肤色。这次终于不会原片比PS后好看了吧。如果你依然这么觉得,请不要残忍的告诉我这个事实,泪谢TAT)附送拍摄花絮,感谢各位的支持更多风格请关注m...
- photoshop后期皮肤变白的技巧
-
PS后期皮肤变白的技巧。1.PS后期让皮肤变白的方法有很多种,接下来教你一种非常简单容易上手的方法。2.打开素材图片之后,直接在小太极下拉框的位置添加一个纯色调整图层,颜色设置一个纯白色,点击...
- Photoshop调出人物的淡雅粉嫩肤色教程
-
本教程主要使用Photoshop调出人物的淡雅粉嫩肤色教程,最终的效果非常的通透迷人,下面让我们一起来学习.出自:86ps效果图:原图:1、打开原图复制一层。2、用Topaz滤镜磨皮(点此下载)。3、...
- 一周热门
- 最近发表
- 标签列表
-
- ps像素和厘米换算 (32)
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)