【PyQt学习篇 · ⑭】:QTableView的使用

文章目录

  • QTableView的使用
  • 示例

QTableView的使用

QTableView 是 PyQt 中用于显示表格数据的窗口部件,它提供了一个灵活的方式来显示和编辑数据。下面是一些关于 QTableView 的使用的具体信息:

  1. 创建 QTableView 对象:

    from PyQt5.QtWidgets import QApplication, QTableViewapp = QApplication([])  # 创建应用程序对象
    tableView = QTableView()  # 创建 QTableView 对象
    
  2. 设置数据模型:

    QTableView 依赖于数据模型来提供数据。常用的数据模型有 QStandardItemModelQAbstractTableModel。可以根据数据的不同复杂性来选择合适的数据模型。

    from PyQt5.QtGui import QStandardItemModel# 创建数据模型
    model = QStandardItemModel()# 设置表头
    model.setHorizontalHeaderLabels(["Column 1", "Column 2"])# 设置数据
    data = [["Row 1, Column 1", "Row 1, Column 2"],["Row 2, Column 1", "Row 2, Column 2"],# ...
    ]
    for i, row in enumerate(data):for j, value in enumerate(row):item = QStandardItem(value)model.setItem(i, j, item)# 将数据模型设置给 QTableView
    tableView.setModel(model)
    
  3. 显示 QTableView:

    tableView.show()
    
  4. 设置选择模式:

    from PyQt5.QtCore import QttableView.setSelectionMode(QTableView.SingleSelection)  # 单选模式
    tableView.setSelectionBehavior(QTableView.SelectRows)  # 选择整行
    tableView.setEditTriggers(QTableView.NoEditTriggers)  # 禁止编辑
    
  5. 获取选中的数据:

    selected_indexes = tableView.selectedIndexes()
    selected_values = []
    for index in selected_indexes:# 判断索引是否有效if index.isValid():value = index.data()selected_values.append(value)
    
  6. 其他常用操作:

    • 调整列宽:tableView.resizeColumnsToContents()
    • 调整行高:tableView.resizeRowsToContents()
    • 隐藏水平表头:tableView.horizontalHeader().setVisible(False)
    • 设置表格样式:tableView.setStyleSheet("QTableView { background-color: white; }")

示例

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItemclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QTableView Example")# 创建数据模型self.model = QStandardItemModel(4, 3)self.model.setHorizontalHeaderLabels(["Name", "Age", "Gender"])# 添加数据data = [["Alice", "25", "Female"],["Bob", "32", "Male"],["Charlie", "42", "Male"],["Diana", "28", "Female"]]for row in range(len(data)):for col in range(len(data[row])):item = QStandardItem(data[row][col])self.model.setItem(row, col, item)# 创建 QTableViewself.table_view = QTableView()self.table_view.setModel(self.model)# self.table_view.setSelectionBehavior(QTableView.SelectRows)     # 设置 QTableView 控件的选择行为为选择整行(默认为选择单个单元格)self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)      # 设置 QTableView 控件的上下文菜单的策略为自定义菜单策略,即用户可以通过customContextMenuRequested信号自定义显示菜单self.table_view.customContextMenuRequested.connect(self.show_context_menu)      # 将self.tabel_view控件的 custonContextMenuRequested 信号连接到自定义函数 show_context_menu 上,以便于显示自定义的上下文菜单# 设置表头自适应宽度self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)# 创建主布局,并将 QTableView 放入其中layout = QVBoxLayout()layout.addWidget(self.table_view)# 创建 QWidget,并将布局设置为其主布局central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)def show_context_menu(self, position):# 右键菜单menu = QMenu(self)# 删除行delete_action = QAction("Delete", self)delete_action.triggered.connect(self.delete_selected_row)# 添加行append_row_action = QAction('Append Row', self)append_row_action.triggered.connect(self.append_row)# 插入行insert_row_action = QAction('Insert Row', self)insert_row_action.triggered.connect(self.insert_row)# 获取值getValue_action = QAction('Get Value', self)getValue_action.triggered.connect(self.get_selected_values)menu.addActions([delete_action, append_row_action, insert_row_action, getValue_action])# 显示菜单menu.exec_(self.table_view.viewport().mapToGlobal(position))# 删除行def delete_selected_row(self):# 删除选中的行rows = sorted(set(index.row() for index in self.table_view.selectedIndexes()), reverse=True)for row in rows:self.model.removeRow(row)# 添加行def append_row(self):# 创建空的数据项empty_item = QStandardItem()self.model.appendRow([empty_item, empty_item, empty_item])# 插入行def insert_row(self):# 创建空的数据项empty_item = QStandardItem()# 获取当前选中的行selected_row = self.table_view.currentIndex().row()# 插入空行到选中行下方self.model.insertRow(selected_row + 1, [empty_item, empty_item, empty_item])def get_selected_values(self):selected_row, selected_column = self.table_view.currentIndex().row(), self.table_view.currentIndex().column()item = self.model.item(selected_row, selected_column)print(item.text())if __name__ == "__main__":app = QApplication(sys.argv)window = MyWindow()window.show()sys.exit(app.exec_())

运行结果:

在这里插入图片描述

  • 选中“Bob”,鼠标点击右键,点击“Delete”。
    在这里插入图片描述
  • 鼠标右键,点击“Append Row”
    在这里插入图片描述
  • 鼠标右键,点击“Insert Row”
    在这里插入图片描述
  • 鼠标右键,点击“Get Value”
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac 生成Android签名证书 .keystore文件

工具下载地址 https://www.oracle.com/java/technologies/downloads/#jdk21-mac1. 找到安装jdk的路径,并进入bin目录下 1.1 查找JDK命令 /usr/libexec/java_home -v结果为: java_home: option requires an argument -- v /Library/Java/JavaVirtualMachines/jdk…

python/C 生成beta分布的随机数

python/C 生成beta分布的随机数 文章目录 python/C 生成beta分布的随机数前言一、beta分布理论知识二、python 生成服从beta分布的随机数三、C语言生成服从beta分布的随机数 前言 想把一个算法用C语言实现,其中涉及到了beta分布取随机数,记录一下结果 一…

雀巢困在业绩和质量里

撰稿|行星 来源|贝多财经 雀巢集团CEO马克施奈德曾在2023年中报中表示,后疫情时代居家消费已恢复常态,从而消除了制约雀巢部分品类增长的阻碍。 但就雀巢前三季度财报而言,该公司在全球及大中华区的销售额均有所下降,有机增长主…

如何使用Java的GeoTools地理库计算WGS84坐标下的两个经纬度之间得距离

介绍 本章讲解如何使用Java的GeoTools地理库计算基于WGS84坐标的两点之间的距离。适用于后台服务的距离计算。 GeoTools介绍 GeoTools是开源的Java地理信息计算库。GeoServer地图引擎就是基于GeoTools库构建得地图服务,可以说非常强大。 官网地址:https://docs.geotools.o…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C#)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C#) Baumer工业相机Baumer工业相机通过SDK实现Raw格式的图像保存的技术背景通过SDK获取相机信息的代码分析Baumer工业相机回调函数里保存原始图像数据Baumer保存Raw图像格式重要核心代…

TikTok真题第1天 | 666.路径和IV、 207.课程安排、210.课程安排

666.路径和IV 题目链接:666.路径和IV 解法: 参考这篇题解:【LeetCode - 666】路径和 IV_力扣666路径总和4-CSDN博客 关键点在于: (1)使用map来存node:key 为整数的前两位,value…

龙芯loongarch64服务器编译安装paddlepaddle

前言 PaddlePaddle (Parallel Distributed Deep Learning,中文名飞桨)是百度公司推出的开源,易学习,易使用的分布式深度学习平台,现阶段各行各业均追求国产化,软件行业也一样,所有需要在龙芯服务器上编译安装paddlepaddle。 官方教程 官方教程里面很多没有讲解到,安…

SQL编写规范及性能排查一些方法

SQL 语句编写规范 避免使用select *,对于宽表来说,这是灾难;严禁不加任何where条件读取数据;MySQL中的text类型字段独立存储,数据量少的表除外:Where条件中的过滤条件字段上严禁使用任何函数,包…

ubuntu 搭建本地私有pip源

# 搭建本地私有pip源 pip install pip2pi# 创建目录 mkdir /data/work/PyPip/ mkdir /data/work/PyPip/packages cd /data/work/PyPip/# 创建需要从外网源同步的package touch requirements_roop.txt# 批量同步 pip2tgz /data/work/PyPip/packages -r requirements_roop.txt# 同…

【JS】按照a>b>c>d>e>f的优先级,将a,b,c,d,e,f元素进行筛选,选出三个不为空字符的元素进行字符拼接

设计思路: 1、定义一个数组,把元素按照优先级进行排序; 2、 使用 filter() 方法过滤掉空字符串元素,得到一个新的数组; 3、在排序函数中,循环数组,使用 indexOf() 方法获取元素 a 和 b 在数组中的索引&a…

描述一个bug及定义bug的级别

(一)描述一个bug 描述一个bug,需要以下几个因素: 故障标题、故障发现的版本、故障类别(功能/兼容/界面)、故障优先级、故障描述(测试环境、测试步骤、预期结果、实际结果)。 举个例…

spring的SPI机制之使用SpringFactoriesLoader加载服务实现

SpringFactoriesLoader提供了一种工厂方式供spring容器来加载特定的服务。像java的SPI一样,约定固定的配置文件和格式,使用SpringFactoriesLoader进行按需加载。只不过SpringFactoriesLoader读取的配置文件位置 “META-INF/spring.factories”。这个文件…

C++的作用域详细解读

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、作用域是什么?二、作用域类别1.全局作用域(global scope)2.名字空间作用域(namespace scope)3.局…

使用Exchanger线程之间交换数据

public class ExchangeThread {static class Producer implements Runnable{//生产者、消费者交换的数据结构private List<String> buffer;//步生产者和消费者的交换对象private Exchanger<List<String>> exchanger;Producer(List<String> buffer,Exch…

MySQL,使用Union组合查询

1、基本使用 Union可将多条select语句组合成一个结果集&#xff0c;常见的使用场景有2种&#xff1a; 在单个查询中&#xff0c;从不同的表返回类似结构的数据&#xff1b;对单个表执行多个查询&#xff0c;按单个查询返回数据。 例&#xff1a;检索出所有价格<50的产品&…

批发订货系统小程序怎么推广 四个方案高效获客

微信小程序基于强社交属性&#xff0c;天然自带引流特性&#xff0c;但毕竟小程序也只是一个工具&#xff0c;想要快速获客&#xff0c;还是需要商家主动采取一些措施的。下面分享是个方法&#xff0c;尤其是最后一个&#xff0c;是十分凑效的。大家点个关注点个赞&#xff0c;…

Android 权限申请

在Android中&#xff0c;从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;应用在运行时需要动态申请权限。以下是一些步骤来动态申请权限&#xff1a; 在应用的清单文件&#xff08;AndroidManifest.xml&#xff09;中声明需要的权限。例如&#xff0c;如果应…

从零开发短视频电商 在AWS上用SageMaker部署自定义模型

文章目录 简介使用model.tar.gz1.从huggingface上下载模型2.自定义代码3.打包为tar 文件4.上传model.tar.gz到S35.部署推理 使用hub1.在sagemaker上新建个jupyterlab2.上传官方示例ipynb文件3.指定HF_MODEL_ID和HF_TASK进行部署和推理 inference.py官方示例 简介 原始链接&…

Mysql的基础问题原理

存储引擎&#xff1a; 存储引擎是Inndb。它支持行级锁&#xff0c;以及表级锁&#xff0c; 支持事务操作&#xff0c; 需要主键&#xff0c;若未声明主键&#xff0c;则会寻找表中的 not null 以及 unique 修饰的字段。若表中无此类字段&#xff0c;会隐式生成字段。 索引&…

解决win10下强制设置web浏览器为microsoft edge的方法

目录 问题场景实现方法禁止edge默认选项设置默认浏览器 反思 问题场景 因为一些特殊的原因&#xff0c;我需要第二个浏览器&#xff0c;我的第一个浏览器是google的chrome浏览器&#xff0c;所以我选择的是windows的默认浏览器&#xff0c;就是microsoft edge浏览器&#xff0…