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 文件数据)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966903.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Matlab优化算法-第14期】基于智能优化算法的VMD信号去噪项目实践

基于智能优化算法的VMD信号去噪项目实践 一、前言 在信号处理领域,噪声去除是一个关键问题,尤其是在处理含有高斯白噪声的复杂信号时。变分模态分解(VMD)作为一种新兴的信号分解方法,因其能够自适应地分解信号而受到…

蓝耘智算平台与DeepSeek R1模型:推动深度学习发展

公主请阅 前言何为DeepSeek R1DeepSeek R1 的特点DeepSeek R1 的应用领域DeepSeek R1 与其他模型的对比 何为蓝耘智算平台使用蓝耘智算平台深度使用DeepSeek R1代码解释:处理示例输入:输出结果: 前言 在深度学习领域,创新迭代日新…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路,通过使用常见的缓存技术,降低大模型的回复速度,下面介绍的是使用redis和mem0,当然redis的语义…

windows蓝牙驱动开发-调试及支持的HCI和事件

调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时,可以使用驱动程序验证程序来协助其调试。 若要启用验证检查,必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作,将禁用验证检查。 若要完全利用验证检查,请确保…

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网:DeepSeek 引言:AI技术浪潮中的深度求索 近年来,人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中,深度求索(DeepSeek)凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…

xxl-job使用nginx代理https后,访问出现403异常问题解决

在nginx代理为https之前,xxl-job使用http访问是没有问题的,但是换为https后,访问就有以下报错: 很多接口都出现了403异常 DataTables warning: table idjob_list - Ajax error. For more information about this error, please s…

kafka 3.5.0 raft协议安装

前言 最近做项目,需要使用kafka进行通信,且只能使用kafka,笔者没有测试集群,就自己搭建了kafka集群,实际上笔者在很早之前就搭建了,因为当时还是zookeeper(简称ZK)注册元数据&#…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

爬虫技巧汇总

一、UA大列表 USER_AGENT_LIST 是一个包含多个用户代理字符串的列表,用于模拟不同浏览器和设备的请求。以下是一些常见的用户代理字符串: USER_AGENT_LIST [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0),Mozilla…

Microsoft Word xml 字符非法解决

如图,word能正常打开,复制内容到另外一个word时候出错,显示: Microsoft Word很抱歉,无法打开文档,因为内容有问题。确定详细信息(D)详细信息xml 字符非法。位置:行:3,列:2439 解决…

现代神经网络QA(LeNet/AlexNet/VGG/NiN/GooleNet/ResNet)-----一篇搞懂

现代神经网络Q&A-----一篇搞懂 LeNet核心架构 经典卷积神经网络的包括: 带填充以保持分辨率的卷积层;非线性激活函数,如ReLU;汇聚层,如最大汇聚层。 pooling时,使用avg还是max? max&…

数据结构与算法(test2)

五、串 1. 串是由___零___个或___多____个字符组成的有限序列, 又称为___字符串________。 一般记为 S“a1a2.....an” (n > 0), 串中的字符数目n称为串的__长度_____,零个字符的串称为___空串_____. 定义中谈到的"有限"是指长度 n 是一个有限的数值…

Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)

Matplotlib基础 Matplotlib是一个用于绘制静态、动态和交互式图表的Python库,广泛应用于数据可视化领域。它是Python中最常用的绘图库之一,提供了多种功能,可以生成高质量的图表。 Matplotlib是数据分析、机器学习等领域数据可视化的重要工…

六种负载均衡算法

六种负载均衡算法对比:原理、优缺点及适用场景 负载均衡是分布式系统的核心技术之一,通过合理分配请求流量,确保服务器资源高效利用,提升系统的可用性和响应速度。不同的负载均衡算法适用于不同的场景,以下是六种常见…

公司配置内网穿透方法笔记

一、目的 公司内部有局域网,局域网上有ftp服务器,有windows桌面服务器; 在内网环境下,是可以访问ftp服务器以及用远程桌面登录windows桌面服务器的; 现在想居家办公时,也能访问到公司内网的ftp服务器和win…

Citespace之关键词爆发检测分析(进阶分析)

在开始citespace进行关键词爆发检测分析之前,如果不会使用citespace的,可以参考我之前这一篇博客: https://blog.csdn.net/m0_56184997/article/details/145536095?spm1001.2014.3001.5501 一、创建工程后进行设置 在创建好工程后&#xf…

【文献讲解】《Non-local Neural Networks》

一、引言 传统的深度学习方法(如卷积神经网络CNN和循环神经网络RNN)在捕捉长距离依赖关系时存在局限性。CNN主要关注局部邻域的特征,而RNN则依赖于序列的递归计算,无法直接捕捉全局信息。为了解决这一问题,本文提出了一种非局部神经网络(Non-local Neural Networks),通…

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言(一些废话) 在看这篇文章的各位大佬,感谢你们留出几分钟时间,来看这个产品介绍,其实重点说实话,不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题,希望大佬们能给出一些建议。万…

IDEA安装离线插件(目前提供了MavenHelper安装包)

目录 1、离线安装方式2、Maven Helper 1、离线安装方式 首先访问 IDEA插件网站 下载离线插件安装包,操作如下: 然后打开IDEA的Settings配置,点击Plugins,点击右侧设置按钮(齿轮),选择Install P…

JVM的性能优化

1.方法内联 方法内联,是指 JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身 ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 注: C++的inline属于编译后内联,但是java是运行时内联 简单通俗的讲就是把方法内部调…