Pyqt 的QTableWidget组件

QTableWidget 是 PyQt6 中的一个表格控件,用于显示和编辑二维表格数据。它继承自 QTableView,提供了更简单的方式来处理表格数据,适合用于需要展示结构化数据的场景。


1. 常用方法

1.1 构造函数

  • QTableWidget(parent: QWidget = None):创建一个空的表格控件。

  • QTableWidget(rows: int, columns: int, parent: QWidget = None):创建一个指定行数和列数的表格控件。

1.2 设置行列数

  • setRowCount(rows: int):设置表格的行数。

  • setColumnCount(columns: int):设置表格的列数。

  • rowCount() -> int:获取表格的行数。

  • columnCount() -> int:获取表格的列数。

1.3 设置表头

  • setHorizontalHeaderLabels(labels: List[str]):设置水平表头的标签。

  • setVerticalHeaderLabels(labels: List[str]):设置垂直表头的标签。

  • horizontalHeader() -> QHeaderView:获取水平表头对象。

  • verticalHeader() -> QHeaderView:获取垂直表头对象。

1.4 设置单元格内容

  • setItem(row: int, column: int, item: QTableWidgetItem):设置指定单元格的内容。

  • item(row: int, column: int) -> QTableWidgetItem:获取指定单元格的内容。

  • takeItem(row: int, column: int) -> QTableWidgetItem:移除指定单元格的内容并返回。

1.5 设置单元格属性

  • setCellWidget(row: int, column: int, widget: QWidget):在指定单元格中放置一个控件(如按钮、下拉框等)。

  • cellWidget(row: int, column: int) -> QWidget:获取指定单元格中的控件。

  • setSpan(row: int, column: int, rowSpan: int, columnSpan: int):合并单元格。

1.6 选择模式

  • setSelectionMode(mode: QAbstractItemView.SelectionMode):设置选择模式(如单选、多选等)。

  • setSelectionBehavior(behavior: QAbstractItemView.SelectionBehavior):设置选择行为(如选择行、选择列等)。

1.7 信号

  • cellChanged(row: int, column: int):当单元格内容发生变化时触发。

  • cellClicked(row: int, column: int):当单元格被点击时触发。

  • cellDoubleClicked(row: int, column: int):当单元格被双击时触发。


2. 例子

import os
import sys
import webbrowser

import qt_material
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.resize(400, 300)

        self.init_widget()
        self.init_signal()
        self.init_getdata()
        self.init_layout()

    def init_widget(self):
        # tablewidget
        self.table = QTableWidget()
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(['网站', 'Url'])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
        self.table.setAlternatingRowColors(True)
        self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)  # 无法编辑



    def init_getdata(self):
        row_count = self.table.rowCount()
        self.table.setRowCount(row_count + 1)
        self.table.setItem(0, 0, QTableWidgetItem('百度'))
        self.table.setItem(0, 1, QTableWidgetItem('https://www.baidu.com/'))

        row_count = self.table.rowCount()
        self.table.setRowCount(row_count + 1)
        self.table.setItem(1, 0, QTableWidgetItem('腾讯视频'))
        self.table.setItem(1, 1, QTableWidgetItem('https://v.qq.com/'))

    def init_signal(self):
        self.table.cellDoubleClicked.connect(self.open_url)  # 双击打开网页

    def init_layout(self):
        v_layout = QVBoxLayout()
        v_layout.addWidget(self.table)
        self.setLayout(v_layout)

    def open_url(self, row, column):
        print(f'{row} {column}')
        if int(column) == 1:
            url = self.table.item(row, column).text()
            webbrowser.open(url)


if __name__ == '__main__':
    os.environ["QT_IM_MODULE"] = "ibus"  # mac系统解决输入法不兼容

    app = QApplication(sys.argv)
    qt_material.apply_stylesheet(app, theme='light_pink.xml')
    window = Window()
    window.show()
    sys.exit(app.exec())

3. 总结

优点

  • 简单易用:提供了直接操作表格数据的接口。

  • 灵活性高:支持动态加载数据、编辑单元格内容和嵌入控件。

  • 功能丰富:支持表头设置、单元格合并、选择模式等功能。

适用场景

  • 数据展示(如成绩表、库存表)。

  • 数据编辑(如员工信息管理、订单管理)。

  • 动态数据加载(如数据库查询结果、CSV 文件数据)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值