入门 PyQt6 看过来(案例)17~ 表格

news2024/9/9 6:30:15

PyQt6提供了两种用于有规律地呈现更多数据的控件,一种是表格结构的控件(QTableView),另一种是树形结构的控件(QTreeView)。表格控件属于QTableView类,QTableWidget继承于QTableView。

1 QTableView 表格控件

QTableView控件中QStandItemMode通过函数setItem(i,j,项)将标准项QStandItem的实例对象添加到表格正文内容的第i行第j列中。调用函数setMode(mode)将模型关联进表格控件。QTableView还可以使用自定义的数据模型来显示更新内容。

QTableView常用的方法如下:

方法描述
rowHeight()获取行高
columnWidth()获取列宽
showGrid()显示一个网格
strechLastSection()展开表格中的单元格
hideRow()和hideColumn()隐藏行和列
showRow()和showColumn()显示行和列
selectRow()和selectColumn()选择行和列
resizeColumnsToContents()或resizeRowsToContents()根据每个列或行的空间需求分配可用空间

QHeaderView表头空间方法:

方法描述
verticalHeader()获得垂直表头
horizontalHeader()获取水平表头
hide()隐藏表头

QTableView控件可以绑定一个模型数据用来更新控件上的内容,可用的模式如下:

名称描述
QStringListModel存储一组字符串
QStandradIttemModel存储任意层次结构的数据
QDirModel对文件系统进行封装
QSqlQueryModel对SQL的查询结果集进行封装
QSqlTableModel对SQL中的表格进行封装
QSqlRelationalTableModel对带有foreign key的SQL表格进行封装
QSortFilterProxyModel对模型中的数据进行排序或过滤

接下来,我们用一个案例来演示下表格的创建以及部分的方法的调用。

2 案例

效果如下:

接下来我们开始实现功能:

2.1 创建表格model

		#创建6行4列标准模型的表格
        self.model = QStandardItemModel(6, 4)
        #设置表头
        self.model.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])

接下来创建TableView视图,并把模式添加到视图。注意:模式就是携带数据的行列内容,你可以直接理解成就是数据

		#创建表格视图对象,指定数据模型
        self.tableView=QTableView()
        self.tableView.move(20,20)
   		#关联QTableView控件和model
        self.tableView.setModel(self.model)

2.2 给模式添加真实的数据

		#设置标准模型数据项
        item11=QStandardItem('1A0001')
        item12=QStandardItem('Python程序设计')
        item13=QStandardItem('60')
        item14=QStandardItem('3')
        #将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(0,0,item11)
        self.model.setItem(0,1,item12)
        self.model.setItem(0,2,item13)
        self.model.setItem(0,3,item14)

        # 设置标准模型数据项
        item21 = QStandardItem('1A0002')
        item22 = QStandardItem('Linux操作系统')
        item23 = QStandardItem('50')
        item24 = QStandardItem('2')
        # 将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(1, 0, item21)
        self.model.setItem(1, 1, item22)
        self.model.setItem(1, 2, item23)
        self.model.setItem(1, 3, item24)

2.3 把这些内容都放到布局

        #将表格视图放入布局中显示
        layout=QVBoxLayout()
        layout.addWidget(self.tableView)
        self.setLayout(layout)

这样就可以实现出表格效果了。

2.4 完整代码

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 表格视图.py
Description:
Author: lzq
date:2024-07-31 09:42
------------------------------------------------
"""
import sys

from PyQt6.QtGui import QStandardItemModel, QStandardItem, QPainter, QPixmap
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableView


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.setWindowTitle("表格视图QTableView测试")
        self.resize(500,300)
        #创建6行4列标准模型的表格
        self.model = QStandardItemModel(6, 4)
        #设置表头
        self.model.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])
        #创建表格视图对象,指定数据模型
        self.tableView=QTableView()
        self.tableView.move(20,20)
        # 设置样式表
        # image_path='./images/lb.jpg'
        # self.tableView.setStyleSheet(f"QTableView{{border-image: url('{image_path}');}}")
        #关联QTableView控件和model
        self.tableView.setModel(self.model)
        #设置标准模型数据项
        item11=QStandardItem('1A0001')
        item12=QStandardItem('Python程序设计')
        item13=QStandardItem('60')
        item14=QStandardItem('3')
        #将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(0,0,item11)
        self.model.setItem(0,1,item12)
        self.model.setItem(0,2,item13)
        self.model.setItem(0,3,item14)

        # 设置标准模型数据项
        item21 = QStandardItem('1A0002')
        item22 = QStandardItem('Linux操作系统')
        item23 = QStandardItem('50')
        item24 = QStandardItem('2')
        # 将标准模型数据项放到表格视图0行0~3列单元格中
        self.model.setItem(1, 0, item21)
        self.model.setItem(1, 1, item22)
        self.model.setItem(1, 2, item23)
        self.model.setItem(1, 3, item24)
        #将表格视图放入布局中显示
        layout=QVBoxLayout()
        layout.addWidget(self.tableView)
        self.setLayout(layout)


if __name__=='__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

本文到此结束,大家可以自己去尝试运行下!

本文结束,自己创建的一个技术球球群 九71六71八2七,想一起卷的看过来!。

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

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

相关文章

安胜:促进数据跨境有序流动 赋能企业数字化转型

数字化转型浪潮中,数据出境面临众多机遇与挑战。从业务角度,经济全球化推动外商投资、跨境业务等业务合作,企业数据跨境流动需求强烈,但数据违规现象频发,不仅导致巨大经济损失,还挑战了国家安全。从监管层…

什么是 HTTP/3?HTTP/3 为何席卷全球?HTTP/3 中有什么新内容?为什么需要它?

超文本传输​​协议 ( HTTP ) 是互联网的基石,有助于加载网页、流式传输视频以及为您最喜爱的应用程序获取数据。 去年 ,负责定义互联网技术的组织 互联网工程任务组 ( IETF )对该协议的新版本 HTTP/3 进行了标准化。自那时起,HTTP/3 和相关…

KubeSphere 部署向量数据库 Milvus 实战指南

作者:运维有术星主 Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库。它以卓越的性能和灵活性,提供了一个强大的平台,用于存储、搜索和管理大规模的向量数据。Milvus 能够执行高速搜索,并以…

纷享销客北方战区游学营举行 五大专项助力伙伴业务“倍速增长”

首届纷享销客北方战区渠道核心伙伴游学营日前在山东济南登场,此次游学营一共设置了五大模块,包括财务专项、组织建设专项、团队成长专项、开源专项、续费及增购专项,旨在帮助纷享销客渠道伙伴夯实高质量增长基础,全方位提升企业经…

上海亚商投顾:沪指震荡收跌 地产、芯片股逆势走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 市场昨日探底回升,三大股指小幅下跌,黄白二线分化明显。 商业航天概念继续走强&#…

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…

wpf基础

快速换行的快捷键 vs 工具->选项->文本编辑器->XAML->Formatting(格式化)->spacing(间距)-> 选择第三个 ,将各个属性分行放置。 然后按CtrlKD 如何快速生成下面的代码 鼠标放在Slider_ValueChanged上面然后FnF12 就可以快速生成 wpf中的绑定 在…

Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签

本教程主要实现【Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入|删除段落|删除标签】。 本文源码:https://gitee.com/songfayuan/go-zero-demo 教程源码分支:master 分支(_examples/word-template/fill-word-template.go&…

ZFIU001 批导会计凭证报错,通过监控点和消息类来定位触发的位置

在创建会计凭证的时候,发送错误,通过打消息类和消息号的条件断点/监控点才解决 文章目录 报错消息号:F5846 创建监控点创建条件断点 报错原因非常注意 报错 消息号:F5846 创建监控点 创建条件断点 报错原因 非常注意

Java8新特性之Stream-Map

Map一些新方法的具体使用案例 1、getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.threadpool;import java.util.HashMap; import java.util.Map;/*** author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)* version 1.0* date…

力扣高频SQL 50题(基础版)第三十四题

文章目录 力扣高频SQL 50题(基础版)第三十四题1978.上级经理已离职的公司员工题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第三十四题 1978.上级经理已离职的公司员工 题目说明 表: Employees -------…

论文阅读:基于生物神经元的模拟游戏世界感知与学习

论文内容概述 AI要90分钟学会的游戏,人脑细胞竟在5分钟搞定了。Cell在2022年的研究中,使用80万体外神经元细胞(DishBrain)竟然学会玩70年代经典街机游戏Pong! 论文链接:In vitro neurons learn and exhibit sentience when emb…

HCIA总结

一、情景再现:ISP网络为学校提供了DNS服务,所以,DNS服务器驻留在ISP网络内,而不再学校网络内。DHCP服务器运行在学校网络的路由器上 小明拿了一台电脑,通过网线,接入到校园网内部。其目的是为了访问谷歌网站…

ctfshow 权限维持 web670--web679

web670 <?php// 题目说明&#xff1a; // 想办法维持权限&#xff0c;确定无误后提交check&#xff0c;通过check后&#xff0c;才会生成flag&#xff0c;此前flag不存在error_reporting(0); highlight_file(__FILE__);$a$_GET[action];switch($a){case cmd:eval($_POST[c…

2024年技校云计算实验室建设及云计算实训平台整体解决方案

随着信息技术的飞速发展&#xff0c;云计算已成为推动数字化转型的关键力量。技校作为培养技能型人才的摇篮&#xff0c;建设云计算实验室并配套完善的实训平台&#xff0c;对于提升学生的专业技能、增强就业竞争力具有重要意义。本文旨在提出2024年技校云计算实验室建设及云计…

列表内容过多卡顿?有索引栏如何实现滚动加载?

&#x1f453;写在前面 很多小伙伴可能在开发业务中会遇到这种问题&#xff0c;数据列表过多&#xff0c;造成dom一次性渲染卡顿&#xff0c;本文主要介绍滚动加载&#xff0c;实现在有索引栏的列表中使用滚动加载的方法。 本文技术栈使用的是vue2vant2&#xff0c;其他框架组…

letcode - string

翻转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/reverse-string/ class Solution { public:void reverseString(vector<char>& s) {reverse(s.begin(),s.end());//直接上逆置接口} }; 函数签名: void reverseStr…

CVPR 2024 录用数据出炉!这些方向是大趋势!

一年一度的计算机视觉和模式识别会议&#xff08;CVPR&#xff09;一直是 CV 界前沿研究的灯塔。 CVPR 2024 录用结果显示&#xff0c;今年共有 2719 篇论文被接收&#xff0c;录用率 23.6%。 那么大模型时代&#xff0c;今年的研究主题有哪些变化&#xff1f; 最近&#xf…

【Python】 ValueError: too many values to unpack 解决方案

【Python】 ValueError: too many values to unpack 解决方案 在Python编程中&#xff0c;ValueError: too many values to unpack是一个常见的错误&#xff0c;通常出现在使用解包操作时。本文将深入探讨这个错误的原因、解决思路、解决方法&#xff0c;并通过具体案例帮助大…

【Python学习手册(第四版)】学习笔记09.3-Python对象类型-分类、引用VS拷贝VS深拷贝、比较、相等、真假值等详解

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 这部分稍杂&#xff0c;视需要选择目录读取。 主要讲的是对之前的所有对象类型作复习&#xff0c;以通俗易懂、由浅入深的方式进行介绍&#xff0c;所有对象类型…