前军教程网

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

12.5 PyQt5表格介绍【表格控件】-QTableWidget

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)

当用户单击一个单元格时发出。参数 rowcolumn 分别返回被单击单元格的行和列

cellDoubleClicked(int row, int column)

当用户双击一个单元格时发出。参数 rowcolumn 分别是返回双击单元格的行和列

cellActivated(int row, int column)

当用户通过单击或按下 Enter 键激活一个单元格时发出。参数 rowcolumn 分别返回被激活单元格的行和列

cellChanged(int row, int column)

当单元格的内容发生变化时发出。参数 rowcolumn 分别返回发生变化的单元格的行和列

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)

当当前单元格发生变化时发出。参数 currentRowcurrentColumn 返回新的当前单元格的行和列,previousRowpreviousColumn 返回之前的当前单元格的行和列

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

返回项的文本对齐方式

发表评论:

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