锋哥原创的PyQt6视频教程:
2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili
QTreeView类,它是树控件的基类,使用时,必须为其提供一个模型来与之配合。
QTreeView类的常用方法:
方法 | 说明 |
---|---|
autoExpandDelay() | 获取自动展开节点所需的延时时间 |
collapse() | 收缩指定级的节点 |
collapseAll() | 收缩所有节点 |
expand() | 展开指定级的节点 |
expandAll() | 展开所有节点 |
header() | 树的头信息,常用的有一个setVisible(方法,用来设置是否显示头 |
isHeaderHidder() | 判断是否隐藏头部 |
setAutoExpandDelay() | 设置自动展开的延时时间,单位为毫秒,如果值小于0,表示禁用自动展开 |
setAlternatingRowColors() | 设置每间隔一行颜色是否一样 |
setExpanded() | 根据索引设置是否展开节点 |
setHeaderHidden() | 设置是否隐藏头部 |
setItemsExpandable() | 设置项是否展开 |
setModel() | 设置要显示的数据模型 |
setSortingEnabled() | 设置单击头部时是否可以排序 |
setVerticalScrollBarPolicy() | 设置是否显示垂直滚动条 |
setHorizontalScrollBarPolicy() | 设置是否显示水平滚动条 |
setEditTriggers() | 设置默认的编辑触发器 |
setExpandsOnDoubleClick() | 设置是否支持双击展开树节点 |
setWordWrap() | 设置自动换行 |
sclectionModel() | 获取选中的模型 |
sortByColumn() | 根据列排序 |
setSelectionMode() | 设置选中模式,取值如下。 QAbstractItemView.NoSelection:不能选择; QAbstractItemView.SingleSelection:单选; QAbstractItemView.MultiSelection:多选; QAbstractItemView.ExtendedSelection:正常单选,按Ctrl或者Shift键后,可以多选; QAbstractItemView.ContiguousSelection:与 ExtendedSelection类似 |
setSelectionBehavior() | 设置选中方式,取值如下。 QAbstractItemView.SelectItems:选中当前项; QAbstractItemView.SelectRows:选中整行; QAbstractItemView.SelectColumns:选中整列 |
QTreeView
类属性
autoExpandDelay
拖放操作期间打开树中项目之前的延迟时间
indentation
树视图中项目的缩进
rootIsDecorated
是否显示用于展开和折叠顶级项目的控件
uniformRowHeights
所有项目是否具有相同的高度
itemsExpandable
项目是否可由用户展开
animated
是否启用动画
allColumnsShowFocus
项目是否应使用所有列显示键盘焦点
wordWrap
文本自动换行策略
headerHidden
标头是否显示
expandsOnDoubleClick
是否可以通过双击扩展项目
QTreeWidget
类属性
columnCount
显示的列数
Header
属性
headerVisible
是否显示标题
headerCascadingSectionResizes
标题列宽联动调整大小
headerDefaultSectionSize
默认标题列宽大小
headerHighlightSections
所选项目的部分是否突出显示
headerMinimumSectionSize
标题可调节的最小尺寸
headerShowSortIndicator
标题显示排序指示器
headerStretchLastSection
是否可调节最后一列的宽度
PyQt6提供的内置模型:
模型 | 说明 |
---|---|
QStringListModel | 存储简单的字符串列表 |
QStandardItemModel | 可以用于树结构的存储,提供了层次数据 |
QFileSystemModel | 存储本地系统的文件和目录信息(针对当前项目) |
QSqlQueryModel | 存储SQL的查询结构集 |
QSqlTableModel | 存储SQL中的表格数据 |
QSqlRelationalTableModel | 存储有外键关系的SOL表格数据 |
QSortFilterProxyModel | 对模型中的数据进行排序或者过滤 |
UI生成代码:
from PyQt6 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(702, 716)
self.treeView = QtWidgets.QTreeView(parent=Form)
self.treeView.setGeometry(QtCore.QRect(80, 40, 256, 192))
self.treeView.setObjectName("treeView")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
Main测试代码:
"""
python加载ui文件
作者 : 小锋老师
官网 : www.python222.com
"""
import sys
from PyQt6.QtGui import QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QApplication, QTreeView
from PyQt6 import uic, QtGui
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = uic.loadUi("./QTreeView树视图.ui")
myTreeView: QTreeView = ui.treeView
model = QStandardItemModel()
model.setHorizontalHeaderLabels(['分类', '书名', '作者', '价格'])
bookType1 = QStandardItem("Java类")
bookType1.appendRow(
[QStandardItem(""), QStandardItem('Java编程思想'), QStandardItem('埃克尔'), QStandardItem('109')]) # 添加二级节点
bookType1.appendRow(
[QStandardItem(""), QStandardItem('Java从入门到精通'), QStandardItem('码牛逼'), QStandardItem('99')]) # 添加二级节点
model.appendRow(bookType1) # 添加一级节点
bookType2 = QStandardItem("Python类")
bookType2.appendRow(
[QStandardItem(""), QStandardItem('Python编程思想'), QStandardItem('老王'), QStandardItem('10')]) # 添加二级节点
bookType2.appendRow(
[QStandardItem(""), QStandardItem('Python跟我学'), QStandardItem('老六'), QStandardItem('20')]) # 添加二级节点
model.appendRow(bookType2) # 添加一级节点
bookType3 = QStandardItem("Go类")
bookType3.appendRow(
[QStandardItem(""), QStandardItem('Go编程思想'), QStandardItem('老王'), QStandardItem('10')]) # 添加二级节点
model.appendRow(bookType3) # 添加一级节点
myTreeView.setModel(model)
myTreeView.expandAll()
ui.show()
sys.exit(app.exec())