[pyqt5]QTabView增删改使用教程

QTableView介绍

QTableView类用于以表格形式输出信息,可通过自定义的数据模型来显示数据,通过setModel来绑定数据源。

创建一个表格视图
self.table_view = QTableView()

1.表格标题栏(表头)的操作

设置表格标题栏的字体
font = self.table_view.horizontalHeader().font()  # 获取当前表格标题栏的字体
font.setFamily("微软雅黑")  # 修改字体样式
self.table_view.horizontalHeader().setFont(font)  # 重新设置新的字体

设置表格标题是否可见(True: 可见,False:不可见)
self.table_view.verticalHeader().setVisible(False)  # 垂直标题栏不可见
self.table_view.horizontalHeader().setVisible(False) # 水平标题栏不可见

设置表格标题栏是否可被点击
self.table_view.verticalHeader().setSectionsClickable(False) # 垂直标题栏不可被点击
self.table_view.horizontalHeader().setSectionsClickable(False) # 水平标题栏不可被点击

设置表格标题栏的背景色
self.table_view.horizontalHeader().setStyleSheet("QHeaderView::section{background:red;}") # 垂直标题栏背景色为红色

设置表格标题栏的高度
self.table_view.horizontalHeader().setFixedHeight(40)

拖动表格标题栏移动行列
self.table_view.horizontalHeader().setSectionsMovable(True); # 设置可拖动
self.table_view.horizontalHeader().setDragEnabled(True); # 启动拖动
self.table_view.horizontalHeader().setDragDropMode(QAbstractItemView.InternalMove) # 设置拖动模式

2.表格的操作

设置行列填满窗口
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 使表宽度自适应
self.table_view.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) # 使表高度自适应

设置内容与表格相匹配(当设置填满窗口时 就不可以拉伸表头)
self.table_view.resizeColumnsToContents()
self.table_view.resizeRowsToContents()

当一个单元格的内容很长时 通过设置表头来显示完整的单元格内容
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)

设置单元格的选中模式(QAbstractItemView共有五种选中模式)
self.table_view.setSelectionMode(QAbstractItemView.SingleSelection) # 选中一个单元格

五种选中模式如下:

模式

说明

QAbstractItemView.NoSelection

禁止选择

QAbstractItemView.SingleSelection

选中单个目标

QAbstractItemView.MultiSelection

选中多个目标

QAbstractItemView.ExtendedSelection

shift键的连续选择

QAbstractItemView.ContiguousSelection

ctrl键的不连续的多个选择

禁止编辑(QAbstractItemView有七种编辑模式)
self.table_view.setEditTriggers(QAbstractItemView.NoEditTriggers)

七种编辑模式如下:

 

模式

说明

QAbstractItemView.NoEditTriggers

0

禁止编辑

QAbstractItemView.CurrentChanged

1

选择视图中新的数据时触发编辑

QAbstractItemView.DoubleClicked

2

鼠标双击时触发编辑

QAbstractItemView.SelectedClicked

4

在一个已经选中的行中单击鼠标时触发编辑

QAbstractItemView.EditKeyPressed

8

在一个视图选中行中点击鼠标时触发编辑

QAbstractItemView.AnyKeyPressed

16

在当前选中的数据(单元格)按下任意键触发当前数据项进入编辑状态

QAbstractItemView.AllEditTriggers

31

以上所有操作行为都触发当前数据项进入编辑状态

设置选中背景色
self.table_view.setStyleSheet("selection-background-color:lightblue;")

设置是否启用滚动条
self.table_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)  # 启用水平滚动条
self.table_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)  # 禁用水平滚动条

设置单元格的尺寸
self.table_view.setColumnWidth(0, 100)   # (固定值0,宽度)

3.获取表格数据

self.table_view.currentIndex().row() # 获取所在行数
self.table_view.currentIndex().column()  # 获取所在列数

获得单元格的内容
self.table_view.currentIndex().data()

4常用操作

设置列名

self.model = QStandardItemModel()
 # 设置水平方向四个头标签文本内容
self.model.setHorizontalHeaderLabels(['序号', '姓名'])

添加一行:

  # 添加一行
        item = QStandardItem("1")
        self.model.setItem(0, 0, item)
        item = QStandardItem("张三")
        self.model.setItem(0, 1, item)

        item = QStandardItem("2")
        self.model.setItem(1, 0, item)
        item = QStandardItem("张四")
        self.model.setItem(1, 1, item)

删除指定行

self.model.removeRow(1)

修改某行某列

item = QStandardItem("3")
self.model.setItem(0, 0, item)

统计有多少行

count = self.model.rowCount()
print(count)
清空列表包括列名
self.model.clear()

清空列表不包括列名

self.model.setRowCount(0)

演示代码如下:

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QHeaderView


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableView = QtWidgets.QTableView(self.centralwidget)
        self.tableView.setGeometry(QtCore.QRect(50, 20, 651, 491))
        self.tableView.setObjectName("tableView")

        self.model = QStandardItemModel()
        # 设置水平方向四个头标签文本内容
        self.model.setHorizontalHeaderLabels(['序号', '姓名'])

        # 添加一行
        item = QStandardItem("1")
        self.model.setItem(0, 0, item)
        item = QStandardItem("张三")
        self.model.setItem(0, 1, item)

        item = QStandardItem("2")
        self.model.setItem(1, 0, item)
        item = QStandardItem("张四")
        self.model.setItem(1, 1, item)


        # #删除一行
        # self.model.removeRow(1)

        #修改某一行
        item = QStandardItem("3")
        self.model.setItem(0, 0, item)

        #统计有多少行
        count = self.model.rowCount()
        print(count)

        # #清空所有行包括列名
        # self.model.clear()

        #清空所有行不包括列名
        self.model.setRowCount(0)

        # QTableView 绑定 数据
        self.tableView.setModel(self.model)
        # 水平方向标签拓展剩下的窗口部分,填满表格
        self.tableView.horizontalHeader().setStretchLastSection(True)
        # 水平方向,表格大小拓展到适当的尺寸
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QTreeView 是 PyQt 中的一个常用控件,用于显示树形结构的数据。下面是一个简单的示例代码,演示如何在 QTreeView 中进行增删操作: ``` # 导入必要的模块 from PyQt5.QtWidgets import QApplication, QMainWindow, QTreeView, QFileSystemModel, QAbstractItemView from PyQt5.QtCore import QModelIndex # 创建主窗口 app = QApplication([]) window = QMainWindow() # 创建 QTreeView 控件 tree_view = QTreeView(window) tree_view.setEditTriggers(QAbstractItemView.DoubleClicked) # 允许双击编辑 tree_view.setHeaderHidden(True) # 隐藏列头 # 创建 QFileSystemModel 模型 model = QFileSystemModel() model.setRootPath("") # 设置根目录为当前目录 tree_view.setModel(model) # 添加根节点 root_index = model.index(model.rootPath()) model.insertRow(0, root_index) model.setData(root_index.child(0, 0), "Root Node") # 添加子节点 child_index = model.index(0, 0, root_index) model.insertRow(0, child_index) model.setData(child_index.child(0, 0), "Child Node") # 修节点 model.setData(child_index.child(0, 0), "New Child Node") # 删除节点 model.removeRow(0, child_index) # 显示窗口 window.setCentralWidget(tree_view) window.show() app.exec_() ``` 在这个示例代码中,我们首先创建了一个 QTreeView 控件和一个 QFileSystemModel 模型。然后,我们添加了一个根节点和一个子节点,并进行了修和删除操作。最后,我们将 QTreeView 控件设置为窗口的中心控件,并显示窗口。 需要注意的是,QTreeView 控件的编辑触发器默认为双击,因此我们需要调用 `setEditTriggers` 方法将其设置为双击。 另外,QFileSystemModel 模型是一个特殊的模型,用于显示文件系统的目录结构。在这个示例中,我们将其用于演示如何在 QTreeView 中进行增删操作。如果您需要使用自定义的模型,可以根据您的需求进行相应的修

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值