1.QTableWidget简介
PyQt5中QTableWidget用于显示表格数据的控件,类似于 QTableView控件,但 QTableWidget 提供了更丰富和简介的方法。
2.QTableWidget案例
import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QHBoxLayout, QWidget, QAbstractItemView
class QTableWidgetDemo(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('QTableWidget演示')
self.resize(600, 400)
h_layout = QHBoxLayout(self)
tw = QTableWidget()
# 禁用编辑
tw.setEditTriggers(QAbstractItemView.NoEditTriggers)
# 单击选中整行
tw.setSelectionBehavior(QAbstractItemView.SelectRows)
# 根据内容自动调整宽度
tw.resizeColumnsToContents()
# 根据内容自动调整高度
tw.resizeRowsToContents()
# 隐藏/显示表头
tw.horizontalHeader().setVisible(True)
# 隐藏默认行号
tw.verticalHeader().setVisible(False)
# 隐藏/显示表格默认边框
tw.setShowGrid(True)
tw
# 设置几行
tw.setRowCount(4)
# 设置几列
tw.setColumnCount(3)
tw.setHorizontalHeaderLabels(['姓名', '年龄', '地址'])
# 填充行内容
name = QTableWidgetItem('张三')
tw.setItem(0, 0, name)
age = QTableWidgetItem('18')
tw.setItem(0, 1, age)
address = QTableWidgetItem('北京')
tw.setItem(0, 2, address)
h_layout.addWidget(tw)
tw.itemClicked.connect(self.on_item_clicked)
tw.itemDoubleClicked.connect(self.on_item_double_clicked)
tw.cellClicked.connect(self.on_cell_clicked)
tw.cellDoubleClicked.connect(self.on_cell_double_clicked)
tw.viewportEntered
def on_item_clicked(self, item):
print(f"Item clicked: {item.text()}")
def on_item_double_clicked(self, item):
print(f"Item double clicked: {item.text()}")
def on_cell_clicked(self, row, column):
print(f"Cell clicked: Row {row}, Column {column}")
def on_cell_double_clicked(self, row, column):
print(f"Cell double clicked: Row {row}, Column {column}")
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QTableWidgetDemo()
w.show()
app.exec()
3.运行结果
4.常用方法
方法 | 描述 |
setRowCount(int rows) | 设置行数 |
rowCount() | 返回表格的行数 |
columnCount() | 返回表格的列数 |
setColumnCount(int columns) | 设置列数 |
setItem(int row, int column, QTableWidgetItem *item) | 设置指定单元格的内容 |
item(int row, int column) | 获取指定单元格的 QTableWidgetItem |
currentItem() | 获取当前选中的项 |
setHorizontalHeaderLabels(list) | 设置水平标题(列标题) |
setVerticalHeaderLabels(list) | 设置垂直标题(行标题) |
horizontalHeader().setStretchLastSection(bool) | 设置默认表格铺满窗口 |
removeRow(int row) | 删除指定行 |
insertRow(int row) | 在指定位置插入一行 |
clear() | 清除表格中的所有内容,包括标题和单元格 |
clearContents() | 清除表格中的所有内容,保留标题 |
sortItems(int column, Qt.SortOrder order) | 对指定列的内容进行排序: sortItems.AscendingOrder:升序排序 sortItems.DescendingOrder:降序排序 |
setSortingEnabled(bool) | 设置是否启用排序功能 |
isSortingEnabled() | 返回是否启用了排序功能 |
setEditTriggers(QAbstractItemView.EditTriggers) | QAbstractItemView.NoEditTriggers:禁止编辑单元格 QAbstractItemView.DoubleClicked:双击编辑单元格 QAbstractItemView.SelectedClicked:点击选中项时触发编辑 QAbstractItemView.AnyKeyPressed:按下任何键时触发编辑 QAbstractItemView.AllEditTriggers:启用所有编辑触发条件 组合触发条件时,条件之间用 | 隔开。 |
verticalHeader().hide(bool) | 隐藏默认行号 |
setSelectionBehavior(behavior) | 控制选择行为,是选择单元格、行还是列: QAbstractItemView.SelectItems:选择单元格。 QAbstractItemView.SelectRows:选择整行。 QAbstractItemView.SelectColumns:选择整列。 |
selectionBehavior() | 获取当前选择行为 |
setSelectionMode(mode) | 设置选择模式(单选、多选等): QAbstractItemView.NoSelection:不允许选择。 QAbstractItemView.SingleSelection:一次只允许选择一个单元格。 QAbstractItemView.MultiSelection:允许选择多个单元格。 QAbstractItemView.ExtendedSelection:允许使用 Shift 或 Ctrl 键进行扩展选择。 |
selectionModel() | 获取当前选中的项的模型,返回QItemSelectionModel 对象,可以处理表格中选中的项、行、列。 常用的 QItemSelectionModel 方法和属性: selectedIndexes():返回所有已选择的索引(即单元格)。 selectedRows():返回已选择的行 selectedColumns():返回已选择的列 hasSelection():检查是否有选中的项目 currentIndex():返回当前的选中项 |
setShowGrid(bool) | 控制是否显示单元格之间的网格线 |
showGrid() | 获取是否显示单元格之间的网格线,返回True和False |
setGridStyle(Qt.PenStyle) | 设置网格线的样式(如虚线、实线等): Qt.NoPen:不绘制网格线 Qt.SolidLine:绘制实线网格线(默认) Qt.DashLine:绘制虚线网格线 Qt.DotLine:绘制点状网格线 Qt.DashDotLine:绘制短划线加点状网格线 Qt.DashDotDotLine:绘制短划线加两点状网格线 |
gridStyle() | 获取当前网格线样式 |
setCornerButtonEnabled(bool) | 设置是否显示表格左上角的选择所有单元格按钮 |
cornerButtonEnabled() | 获取表格左上角的选择所有单元格按钮是否启动 |
setVisible(bool) | 控制QTableView是否可见 |
selectRow(row) | 选中指定的行 |
selectColumn(column) | 选中指定的列 |
setSpan(row, column, rowSpan, columnSpan) | 合并单元格 |
setWordWrap(bool) | 设置单元格中的文本是否自动换行 |
horizontalHeader().setVisible(bool) | 是否显示表头 |
setAlternatingRowColors(bool) | 控制隔行交替显示颜色 |
hideColumn(column) | 隐藏指定列 |
hideRow(row) | 隐藏指定行 |
setColumnWidth(column: int, width: int) | 设置指定列宽 |
columnWidth(column: int) | 获取指定列宽 |
setRowHeight(row: int, height: int) | 设置指定行高 |
rowHeight(row: int) | 获取指定行高 |
verticalScrollBar() | 用于获取垂直滚动条返回,QScrollBar对象 |
mapToGlobal(a0: QPoint) | 将一个点从控件的局部坐标系映射到全局坐标系,常用于在屏幕上定位控件或在特定位置显示上下文菜单等操作。 |
findItems(text: str, flags: [Qt.MatchFlags, Qt.MatchFlag]) | 在表格内容搜索指定内容:text:要搜索的内容;flags:匹配标志。返回匹配成功的列表。 常用的Qt.MatchFlags匹配标志: Qt.MatchExactly: 完全匹配(默认),只有完全匹配的项才会被返回。 Qt.MatchContains: 如果项包含模式,则匹配。 Qt.MatchStartsWith: 如果项以模式开始,则匹配。 Qt.MatchEndsWith: 如果项以模式结束,则匹配。 Qt.MatchCaseSensitive: 匹配时区分大小写。 Qt.MatchCaseInsensitive: 匹配时不区分大小写。 Qt.MatchRecursive: 在嵌套项中递归搜索。 |
setContextMenuPolicy(policy: Qt.ContextMenuPolicy) | 设置上下文菜单策略。 常用ContextMenuPolicy策略: Qt.NoContextMenu: 不允许上下文菜单。 Qt.PreventContextMenu: 禁止上下文菜单。 Qt.DefaultContextMenu: 使用默认的上下文菜单。 Qt.ActionsContextMenu: 使用动作(Action)上下文菜单。 Qt.CustomContextMenu: 用户自定义上下文菜单。使用此策略时,需要连接 customContextMenuRequested 信号到一个槽函数来处理自定义上下文菜单。 |
4.常用信号
方法 | 描述 |
itemClicked(QTableWidgetItem *item) | 当用户单击一个项时发出。参数 item 返回被单击的项 |
temDoubleClicked(QTableWidgetItem *item) | 当用户双击一个项时发出。参数 item 返回被双击的项 |
itemActivated(QTableWidgetItem *item) | 当用户通过单击或按下 Enter 键激活一个项时发出。参数 item 返回被激活的项 |
itemChanged(QTableWidgetItem *item) | 当项的内容发生变化时发出。参数 item 返回发生变化的项 |
itemSelectionChanged() | 当选择发生变化时发出 |
itemSelectionChanged() | 当选择发生变化时发出 |
cellClicked(int row, int column) | 当用户单击一个单元格时发出。参数 row 和 column 分别返回被单击单元格的行和列 |
cellDoubleClicked(int row, int column) | 当用户双击一个单元格时发出。参数 row 和 column 分别是返回双击单元格的行和列 |
cellActivated(int row, int column) | 当用户通过单击或按下 Enter 键激活一个单元格时发出。参数 row 和 column 分别返回被激活单元格的行和列 |
cellChanged(int row, int column) | 当单元格的内容发生变化时发出。参数 row 和 column 分别返回发生变化的单元格的行和列 |
itemPressed(QTableWidgetItem *item) | 当用户按下鼠标键时发出。参数 item 返回被按下的项 |
itemReleased(QTableWidgetItem *item) | |
itemEntered(QTableWidgetItem *item) | 当用户将鼠标移到一个项上时发出。参数 item 返回鼠标悬停的项 |
itemChanged(QTableWidgetItem *item) | 当项的内容发生变化时发出。参数 item 返回发生变化的项 |
currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous) | 当当前项发生变化时发出。参数 current 返回的当前项,previous 返回之前的项 |
currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) | 当当前单元格发生变化时发出。参数 currentRow 和 currentColumn 返回新的当前单元格的行和列,previousRow 和 previousColumn 返回之前的当前单元格的行和列 |
viewportEntered() | 当鼠标进入视口区域时发出 |
5. QTableWidgetItem介绍
QTableWidgetItem 是 PyQt5 中的一个类,用于表示 QTableWidget 中的项。每个项都可以包含文本、图标以及其他数据,并且可以拥有不同的状态,如是否被选中、是否可编辑等。QTableWidgetItem 提供了许多方法和属性来帮助您管理表格中的数据。
方法 | 描述 |
setText(str text) | 设置项中的文本内容 |
text() | 返回项中的文本内容 |
setIcon(QIcon icon) | 设置项中的图标 |
setIconSize(size: QSize) | 设置项中的图标大小 |
icon() | 返回项中的图标 |
setFlags(Qt.ItemFlags flags) | 设置项的标志,例如可选性、可编辑性等 |
flags() | 返回项的标志 |
setBackground(QBrush brush) | 设置项的背景色,例如:QBrush(QColor(200, 10, 40)) |
background() | 返回项的背景色 |
foreground() | 返回项的前景色(文本颜色) |
setForeground(QBrush brush) | 设置项的前景色(文本颜色),例如:QBrush(QColor(255, 255, 255)) |
setFont(QFont font) | 设置项的字体,例如:QFont('黑体', 20, Qt.black) |
font() | 返回项的字体 |
setData(Qt.ItemDataRole role, QVariant value) | 设置项的数据,根据指定的角色,例如 :setData(Qt.UserRole, {'a':1}) Qt.DisplayRole: 显示在单元格中的文本或图像 Qt.ToolTipRole: 显示为工具提示(悬停时出现) Qt.EditRole: 编辑时使用的数据 Qt.DecorationRole: 用作单元格的装饰(如图标) Qt.UserRole: 自定义数据,可以存储任意类型。数据不会直接显示,但可以在程序中使用。 |
data(Qt.ItemDataRole role) | 返回项的数据,根据指定的角色,例如:data(Qt.UserRole) |
setCheckState(Qt.CheckState state) | 设置项的检查状态 |
checkState() | 返回项的检查状态 |
setSizeHint(QSize size) | 设置项建议的大小 |
sizeHint() | 返回项建议的大小 |
setToolTip(str tooltip) | 返回项的工具提示 |
toolTip() | 设置项的工具提示 |
setStatusTip(str statusTip) | 设置项的状态提示 |
statusTip() | 返回项的状态提示 |
setWhatsThis(str whatsThis) | 设置项的“这是什么”帮助文本 |
whatsThis() | 返回项的“这是什么”帮助文本 |
setTextAlignment(Qt.Alignment alignment) | 设置项的文本对齐方式: Qt.AlignRight:右对齐 Qt.AlignCenter:居中对齐 Qt.AlignLeft:左对齐 Qt.AlignBottom:下对齐 Qt.AlignTop:上对齐 Qt.AlignHCenter:水平居中 Qt.AlignVCenter:垂直居中 |
textAlignment() | 返回项的文本对齐方式 |