[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_())

你可能感兴趣的:(pyqt5,qt,开发语言)