PyQt学习随笔:QTableWidget的visualRow、visualColumn、logicalRow、logicalColumn(可见行、逻辑行、可见列、逻辑列)相关概念及方法探究

Qt QTableWidget表格控件的用法(非常详细) Qt QTableWidget表格控件的用法(非常详细) QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。 整个 QTableWidget 表格可以分为 3 个区域: 区域 ① 和 ② 都是表头,区域 ① 设置每一行的表头,区域 ② 设置每一列的表头。我们可以自定义两个区域内的表头,比如第一列是各个教程的名称,所以第一列的表头可以修改为“教程名称”; 区域 ③ 为数据区,表格中所有的数据都位于此区域,该区域内 阅读详情

一、概念

关于逻辑行logicalRow、列logicalColumn和可见行visualRow、列visualColumn的概念,在QTableWidget中没有介绍,老猿查了比较多的资料,并经过验证,最终才搞清楚相关概念。这里有几个关键点要说明一下:

  1. 逻辑行和逻辑列是指项本身在部件中存储数据的行和列,是通过setItem将项与QTableWidget的逻辑行和列进行绑定的,也是通过QTableWidgetItem项方法row()和column()返回的值
  2. 界面可见行和列是指在部件上的行号和列号,从部件中第一行和第一列数据开始到指定逻辑行或逻辑列在部件内的序号,但隐藏行和列(这里的隐藏包括通过表头方法hideSection实现、数据在视口外、在可以手工调整行和列大小时将其大小调整到最小不可见)也必须参与在内。这个地方是个坑,说是可见行和可见列,但实际上隐藏未展现的和在视口外的数据都是参与行号和列号的计数
  3. 仅当部件中的行或列通过表头的moveSection交换了行或列数据所在的位置时才出现逻辑行列和可见行列不一致的情况

二、逻辑行相关方法

QTableWidget中可以根据项实例去获取项的逻辑行和列位置,调用方法如下:

  • int column( QTableWidgetItem item)
  • int row( QTableWidgetItem item)

如果对应项在QTableWidget表格部件中不存在,则返回-1。

三、可见行和列相关方法

3.1、相关方法

要获取表格部件中的可见行号和列号,调用方法:

  • int visualColumn(int logicalColumn)
  • int visualRow(int logicalRow)

3.2、案例

3.2.1、 案例说明

本案例在QTableWidget部件中显示4行3列数据,根据数据的逻辑行号和列号显示表头,如第一行显示"行1",第一列显示"列1",对应项存储的数据为“(行号-1,列号-1)”,“行号-1”、“列号-1”就是项的逻辑行号和列号,因为计数是从0开始。
为了显示逻辑数据和可见数据的差别,案例中将第一行数据(行号为0)进行隐藏,同时将第4行数据移动到了第3行。
为了观察数据,实现了项被点击时输出相关逻辑行、列和可见行和列以及项存储的数据。

3.2.2、 项初始化initItems()方法代码
    def initItems(self):
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(3  )
        width = self.tableWidget.viewport().width() - 20

        for row in range(4):
            for col in range(3):
                item = QtWidgets.QTableWidgetItem(f"({row},{col})" )
                self.tableWidget.setItem(row,col,item)

        self.tableWidget.setVerticalHeaderLabels(['行1','行2','行3','行4'])
        self.tableWidget.setHorizontalHeaderLabels(['列1','列2','列3'])
        self.tableWidget.verticalHeader().moveSection(3,2) #将第4行移动到第3行
        self.tableWidget.verticalHeader().hideSection(0) #隐藏第一行
3.2.3、 项点击槽方法代码
    def cellClicked( self,rowid,  column):
        r = self.tableWidget.visualRow(rowid)
        c = self.tableWidget.visualColumn(column)
        item = self.tableWidget.currentItem()
        print(f"点击了部件项,对应项的逻辑行和列为:({rowid},{column}),可见行和列为:({r},{c}),存储数据为:{item.text()}")
3.2.4. 运行截图

在这里插入图片描述
从上述截图可以看到,逻辑的第一行数据不可见,第三行和第四行数据交换了位置。

3.2.5、点击项(1,0)输出信息

在界面上点击可见的第一行和第一列数据(对应数据为“(1,0)”)输出信息

点击了部件项,对应项的逻辑行和列为:(1,0),可见行和列为:(1,0),存储数据为:(1,0)

由于隐藏的行也参与可见行号的计算,因此该项的逻辑行和可见行相同。

3.2.6、点击项(3,1)输出信息

在界面上点击可见的第二行和第二列数据(对应数据为“(3,1)”)输出信息:

点击了部件项,对应项的逻辑行和列为:(3,1),可见行和列为:(2,1),存储数据为:(3,1)

由于第二行数据实际对应的逻辑行是3(从0计数),可见行(含隐藏行)是2(也是从0计数),所以逻辑行和可见行数据不同

3.2.7. 点击项(2,2)输出信息

在界面上点击可见的第三行和第三列数据(对应数据为“(2,2)”)输出信息:

点击了部件项,对应项的逻辑行和列为:(2,2),可见行和列为:(3,2),存储数据为:(2,2)

四、小结

  1. 表格部件QTableWidget的项设置方法(setItem)所使用的行和列是项的逻辑行号和列号,表示数据在表格部件的存储位置,表格部件中绝大多数方法所使用的行和列都是逻辑行和列。
  2. 仅当表格部件的表头使用moveSection方法才会导致表格部件的逻辑行列号可能和可见行列号不一致,行和列的隐藏以及超出视口都不会导致逻辑行列号可能和可见行列号不一致;
  3. 由于隐藏数据也在可见行列中计数,因此这儿的可见行列其实是不准确的,visualColumn和visualRow这两个方法在使用上需要注意。

老猿Python,跟老猿学Python!

探究logicalColumn的相关概念及方法——Python实现 logicalColumn是一种将函数应用于数据列的库。logicalColumn提供了多种功能,包括筛选、计算、合并和生成新列等,这使得我们可以高效地完成数据的处理与分析。在数据分析领域中,我们经常需要对数据进行处理和清洗,其中一个非常重要的环节就是列处理。对于不同的列,我们可能需要根据不同的需求进行不同的操作,并生成新的列。在Python中,我们可以使用pip install logicalcolumn 安装logicalColumn库,下面我们就来看一下如何使用logicalColumn完成列处理。 阅读详情

相关推荐

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

本文提供了一份详细的Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航的避坑指南,涵盖Gazebo启动失败、场景加载问题、环境变量设置、GLIBCXX版本冲突及Nav2参数配置等5个常见报错的解决方案,帮助开发者高效完成机器人导航项目。

weixin_29062823的博客 286

网络设备配合SecureCRT使用解决命令行超长串行问题的典型配置

一.组网需求: 目前工程师普遍使用超级终端、SecureCRT或者TCL等串口调试工具对网络设备进行调试。由于工具的默认设置的差异在与网络设备配合时,经常出现命令行过长的情况下退格串行的情况发生。本文将以常用的SecureCRT、TCL两种工具为例,解决“串行”问题。二、 配置步骤: 如上图所示,使用串口线连接设备的console口。解决“串行”问题需要两个步骤。步骤一:调整网络

xiaofei0859的专栏 5822

电流镜结构实战:从零理解MOS管偏置电路设计(附吴金课程补充)

本文深入解析电流镜结构在MOS管偏置电路设计中的关键作用,从基本原理到实战应用全面覆盖。通过分析偏置电路的核心原理、破解设计难题的实用技巧,以及进阶优化策略,帮助工程师掌握这一模拟电路设计的核心技术。特别适合需要理解电流镜结构和基准电路设计的读者参考学习。

ujm5678901的博客 256

QTablewidget 常规操作

三、单选模式下设置多行选中。

HUANG_XIAOJUN的博客 313

Switch游戏安装新思路:抛弃Commander One,试试这款免费的Mac神器OpenMTP

本文介绍了Mac用户安装Switch游戏的新选择——免费工具OpenMTP,对比收费软件Commander One,OpenMTP在MTP连接稳定性和文件管理上更具优势。详细解析了OpenMTP的安装配置、核心功能及实战操作,帮助用户高效完成游戏安装,特别适合已破解并安装DBI的Switch用户。

weixin_30664051的博客 583

LAMMPS实战:如何用ReaxFF力场模拟碳氢化合物热解(附完整脚本)

本文提供了一份使用LAMMPS软件中ReaxFF反应力场模拟碳氢化合物热解过程的完整实战指南。内容涵盖从环境准备、力场参数选择、能量最小化,到升温恒温动力学模拟的完整脚本编写,并介绍了基于轨迹文件的产物分析方法,帮助计算化学与材料科学研究者快速上手这一关键的分子动力学仿真技术。

soda5的博客 1099

QTableWidget表格行列随着窗口进行变化

QTableWidget表格在窗口变化时,行列都随着变化,可以通过以下两行代码进行设置 QT4中的设置: //表列随着表格变化而自适应变化 table->horizontalHeader()->setResizeMode(QHeaderView::Stretch); //表行随着表格变化而自适应变化 table->verticalHeader(...

houxiaoliwang的博客 4418

[Dify实战] 用 Dify 打造高效的新员工 7 天成长计划-带绑定资源

本文介绍了如何利用Dify平台为新员工制定智能成长计划,解决融入难、节奏乱、成长慢等问题。方案通过输入岗位信息自动生成7天结构化计划,包含每日任务和评估要点,并支持进度跟踪与报告输出。关键点在于设计清晰的Prompt模板,合理分配学习节奏,形成闭环反馈机制。该方案能显著提升新员工培养效率,实现人才培养的数字化升级。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 569

ssecurecrt 最大行数_secureCRT 改变展示宽度

每次用secureCRT登陆后sqlplus查询数据都是折行显示,即使set lines 1024参数后也没用,很不爽,今天终于搞定了。SecureCRT v5.5.1 (build 407)1、首先全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns 最大只能设置成1024(推荐256),设置越大越占用内存,...

weixin_36207513的博客 1367

Python数据分析全流程指南:从数据采集到可视化呈现的实战解析

在数字化转型浪潮中,数据分析已成为企业决策的核心驱动力。Python凭借其丰富的生态库和简洁的语法,成为数据分析师的首选工具。本文将以实战案例为脉络,拆解数据分析全流程的关键环节,通过具体代码和场景说明如何用Python完成从数据采集到可视化呈现的完整链路。

这家伙很懒,什么都没有留下 1681

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2615

【Qt5.8】Qt5.8中QTableWidget 类介绍

00. 目录 00. 目录 01. QTableWidget介绍 02. 成员函数简介 01. QTableWidget介绍 QTableWidget是基于QTableView的一个默认的视图模型;它用于显示一个标准的表格。表格中每一个项通过QTableWidgetItem来实现。 头文件:#include qmake:QT += widgets 继承自:QTa...

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 3017

华为od 面试八股文_Android安卓_05_含答案

华为od 面试八股文_Android安卓_05_含答案

MISAYAONE的博客 950

QTableWidget 显示行号列

//显示自定义 QStringList verticalHeader; verticalHeader << QStringLiteral("结果"); ui->tableWidget->setVerticalHeaderLabels(verticalHeader); //显示行号列 QHeaderView* headerView = ui->tableWidget->verticalHeader(); headerView->setHidden(false...

It is me 的博客 5383

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

QTableWidget用法总结

QTableWidget选中某行的信号和相关属性

u011671745的博客 1083

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Qt之表格的理解和使用(QTableView和QTableWiget)

对QTableView 与 QTableWidget的理解和使用,同时使用自定义数据模型来显示数据,提供工程下载

linyibin_123的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

QTableView固定行显示的问题

QT4.8.5 + vs2010 本来QTableView::selectRow可以设置选择行且将选中行在视野中可见,即直接调用这个接口就行,但是需求是保证某行在视野里可见, 1. 插入数据后直接调用此接口,选中新行不行,现象是新行选中了,但是无法在视野中可见, 2. 先调用clearSelection,清除选择行,再选中新行,现象也是一样, 3. 最终发现,先选中一下其他行,再选中目标行即可,方案如下,特此记录. ui->tableView->selectRow(0); ui-&g

guomingbing12的专栏 2335

QTableView优化的几点经验

3.使用->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);除此之外,还可以设置->setSelectionMode(QAbstractItemView::NoSelection);或者->setFocusPolicy(Qt::NoFocus);

zxbcollegestudent的专栏 1908

QTableWidget使用笔记

QTableWidget常用代码 1.行列序号从0开始,垂直标题在左边,水平标题在上面 2.设置列宽格式 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191102105042646.png 3.留意item为空或越界致崩溃,例如 A.新建的item应在行列最大值范围。 B.调用item时不要忽略是否建过及存在 C.通过removeRow移除......

LebronBear的博客 1418

[QT_009]Qt学习之QTableWidget详解

Qt学习之QTableWidget详解

kongcheng253的博客 1万+

Qt tableview总结

1> tabelview中选取一整行 ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); 2> 获取tableView中当前点击的行号 int row = ui->tableView->currentIndex().row(); 3> 表头信息显示居左 ui->tableView->horizontalH

没有如果的博客 1万+

qt -- QTableWidget的使用

目录 1、设置表头 2、函数对单元格属性使用 3、信号 4、插入、删除、添加 5、自动调整行高和列宽 6、其他属性 QTableWidget是Qt中的表格组件类。在窗体上放置一个QTableWidget组件后,可以在propertyEditor里对其进行属性设置,双击这个组件,可以打开一个编辑器,对其Colum、Row和Item行编辑。 1、设置表头 //设置表头 QTableWidgetItem * headerItem; QStringList headerText; hea..

ccr的博客 2759

secureCRT 输出打印缺失的问题

网上解决的方法: secureCRT 显示默认是换行的,如果设置了不换行,当一行字符比较多的时候,会显示不全。下面的设置就是解决这两个问题的。 Options -> Global Options -> Terminal -> Appearance -> Maximum columns 设置成1200(值越大,一行显示的字符越多,如果一行的字符大于这里设置的值,则多余的字...

chengf223的博客 3784

QTableView如何获取当前显示的可见行和列的索引?

QTableView 如何获取当前显示的可见行和列

chenzhjlf的专栏 1460

PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges返回选中矩形的列表,通过方法setRangeSelected将指定矩形范围的项选中或去选中。相关方法调用语法如下: list[QTableWidgetSelectionRange] select...

老猿Python 3840
上一篇: PyQt(Python+Qt)学习随笔:QTableWidget的获取指定位置项的item和itemAt方法
下一篇: PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值