前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

12.6 PyQt5表格介绍【表格控件】-QTableView

1.QTableView简介

PyQt5中QTableView用于显示二维表格数据的控件。QTableView 是基于模型/视图架构的,通过数据模型来管理和显示数据。

2.QTableView案例

import sys
from PyQt5.QtWidgets import QApplication, QTableView, QWidget, QVBoxLayout, QAbstractItemView
from PyQt5.QtGui import QStandardItemModel, QStandardItem


class QTableViewDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('QTableView表格')
        self.resize(600, 400)

        v_layout = QVBoxLayout(self)

        # 创建模型,参数(4行,3列)
        model = QStandardItemModel(4, 3)

        # 创建列
        model.setHorizontalHeaderLabels(['ID', '姓名', '年龄'])

        table = QTableView()

        table.setAlternatingRowColors(True)
        # 关联tableview和model
        table.setModel(model)
        # 默认铺满
        table.horizontalHeader().setStretchLastSection(True)
        # 隐藏默认行号
        table.verticalHeader().hide()
        # 禁止编辑
        table.setEditTriggers(QAbstractItemView.NoEditTriggers)

        # 设置列宽,参数:(第几列,宽度)
        table.setColumnWidth(0, 100)
        table.setColumnWidth(1, 300)
        table.setColumnWidth(3, 200)

        # 添加数据,QStandardItem为每一个单元格
        col_1_1 = QStandardItem('1')
        col_1_2 = QStandardItem('张三')
        col_1_3 = QStandardItem('40')

        # 设置表格数据,参数:(第几行,第几列,QStandardItem)
        model.setItem(0, 0, col_1_1)
        model.setItem(0, 1, col_1_2)
        model.setItem(0, 2, col_1_3)

        v_layout.addWidget(table)

        table.clicked.connect(self.on_clicked)
        table.activated.connect(self.on_activated)
        table.doubleClicked.connect(self.on_double_clicked)

    def on_clicked(self, index):
        print(index.row())
        print(index.data())
        print(index.column())

    def on_activated(self, index):
        print(f"Activated: {index.data()}")

    def on_double_clicked(self, index):
        print(f"Double Clicked: {index.data()}")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QTableViewDemo()
    w.show()
    app.exec()

3.运行结果

4.常用方法

方法

描述

setItem(int row, int column, QStandardItem)

设置指定单元格的内容

setHorizontalHeaderLabels(list)

设置水平标题(列标题)

setVerticalHeaderLabels(list)

设置垂直标题(行标题)

horizontalHeader().setStretchLastSection(bool)

设置默认表格铺满窗口

removeRow(int row)

删除指定行

insertRow(int row)

在指定位置插入一行

clear()

清除表格中的所有内容,包括标题和单元格

clearContents()

清除表格中的所有内容,保留标题

verticalHeader().hide(bool)

隐藏默认行号

setSelectionMode(mode)

设置选择模式(单选、多选等): QAbstractItemView.NoSelection:不允许选择。 QAbstractItemView.SingleSelection:一次只允许选择一个单元格。 QAbstractItemView.MultiSelection:允许选择多个单元格。 QAbstractItemView.ExtendedSelection:允许使用 Shift 或 Ctrl 键进行扩展选择。

selectionMode()

获取当前选择模式

setSelectionBehavior(behavior)

控制选择行为,是选择单元格、行还是列: QAbstractItemView.SelectItems:选择单元格。 QAbstractItemView.SelectRows:选择整行。 QAbstractItemView.SelectColumns:选择整列。

selectionBehavior()

获取当前选择行为

setShowGrid(bool)

控制是否显示单元格之间的网格线

showGrid()

获取是否显示单元格之间的网格线,返回True和False

setAlternatingRowColors(bool)

控制隔行交替显示颜色

setGridStyle(Qt.PenStyle)

设置网格线的样式(如虚线、实线等): Qt.NoPen:不绘制网格线 Qt.SolidLine:绘制实线网格线(默认) Qt.DashLine:绘制虚线网格线 Qt.DotLine:绘制点状网格线 Qt.DashDotLine:绘制短划线加点状网格线 Qt.DashDotDotLine:绘制短划线加两点状网格线

gridStyle()

获取当前网格线样式

setCornerButtonEnabled(bool)

设置是否显示表格左上角的选择所有单元格按钮

cornerButtonEnabled()

获取表格左上角的选择所有单元格按钮是否启动

setVisible(bool)

控制QTableView是否可见

sortItems(int column, Qt.SortOrder order)

对指定列的内容进行排序: sortItems.AscendingOrder:升序排序 sortItems.DescendingOrder:降序排序

setSortingEnabled(bool)

设置表格是否可以排序

isSortingEnabled()

获取表格是否允许排序

setModel(model)

设置表格的模型: QStandardItemModel:通用的模型,适合大多数应用场景 QSqlTableModel:用于管理和显示数据库表的数据,通过PyQt5.QtSql导入 QSqlQueryModel:用于执行和显示 SQL 查询的结果,通过PyQt5.QtSql导入 QFileSystemModel:用于管理和显示文件系统的数据

model()

获取当前设置的模型

resizeColumnsToContents()

根据内容自适应调整列宽

resizeRowsToContents()

根据内容自适应调整行高

setColumnWidth(column, width)

设置指定列的宽度

etRowHeight(row, height)

设置指定行的高度

hideColumn(column)

隐藏指定列

hideRow(row)

隐藏指定行

scrollTo(index, hint)

滚动到指定的单元格 常用的滚动行为 (hint): QAbstractItemView.EnsureVisible:确保单元格可见 QAbstractItemView.PositionAtTop:滚动使单元格位于顶部 QAbstractItemView.PositionAtCenter:滚动使单元格位于中心

selectRow(row)

选中指定的行

selectColumn(column)

选中指定的列

setSpan(row, column, rowSpan, columnSpan)

合并单元格

setWordWrap(bool)

设置单元格中的文本是否自动换行

setEditTriggers(QAbstractItemView.EditTriggers)

QAbstractItemView.NoEditTriggers:禁止编辑单元格 QAbstractItemView.DoubleClicked:双击编辑单元格 QAbstractItemView.SelectedClicked:点击选中项时触发编辑 QAbstractItemView.AnyKeyPressed:按下任何键时触发编辑 QAbstractItemView.AllEditTriggers:启用所有编辑触发条件 组合触发条件时,条件之间用 | 隔开。

horizontalHeader().setVisible(bool)

是否显示表头

4.常用信号

方法

描述

clicked(const QModelIndex &index)

当用户点击表格中的某个单元格时发出此信号

doubleClicked(const QModelIndex &index)

当用户双击表格中的某个单元格时发出此信号

activated(const QModelIndex &index)

当用户激活表格中的某个单元格时(例如,通过键盘操作或双击鼠标)发出此信号

pressed(const QModelIndex &index)

当用户按下表格中的某个单元格时发出此信号,类似于 clicked,但更早触发

entered(const QModelIndex &index)

当鼠标光标进入某个单元格时发出此信号

viewportEntered()

当鼠标光标进入表格视图区域时发出此信号

selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)

当表格中选定的单元格发生变化时发出此信号。该信号传递新选定的项和取消选定的项。

currentChanged(const QModelIndex ¤t, const QModelIndex &previous)

当表格中当前的选中项发生变化时发出此信号

horizontalScrollbarAction(int action)

当水平滚动条上的滑块被移动或滚动条的其他部分被按下时发出。参数 action 描述了所执行的动作

verticalScrollbarAction(int action)

当垂直滚动条上的滑块被移动或滚动条的其他部分被按下时发出。参数 action 描述了所执行的动作

horizontalScrollbarValueChanged(int value)

当水平滚动条的值改变时发出。参数 value 是新的滚动条值

verticalScrollbarValueChanged(int value)

当垂直滚动条的值改变时发出。参数 value 是新的滚动条值

modelChanged(QAbstractItemModel *model)

当模型发生变化时发出。参数 model 是新的模型

customContextMenuRequested(const QPoint &pos)

当用户右击视图时发出。参数 pos 是鼠标位置相对于视图的坐标

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言