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 是鼠标位置相对于视图的坐标 |