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

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控件和modelself.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 sysfrom PyQt6.QtGui import QStandardItemModel, QStandardItem, QPainter, QPixmap
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableViewclass 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控件和modelself.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://xiahunao.cn/news/3281375.html

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

相关文章

IT人求职就业手册:如何在数字时代脱颖而出

💂 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

【CodinGame】趣味算法(教学用) CLASH OF CODE -20240731

文章目录 正文闰年偶数和密码塔楼高度 写在最后END 正文 闰年 import sys import math# Auto-generated code below aims at helping you parse # the standard input according to the problem statement.a int(input()) b int(input()) count0 for i in range(a, b 1):if…

DELL服务器RAID配置详细教程

DELL服务器RAID配置教程 在启动电脑的时候按CTRLR 进入 RAID 设置见面如下图 名称解释: Disk Group:磁盘组,这里相当于是阵列,例如配置了一个RAID5,就是一个磁盘组 VD(Virtual Disk): 虚拟磁盘&#xff…

开启智能开发的新纪元:探索 GPT-4o mini 模型的无限可能

引言 随着人工智能技术的飞速发展,大型语言模型已成为推动软件开发和创新的关键力量。OpenAI 最新发布的 GPT-4o mini 模型以其卓越的性能和极具竞争力的价格,为开发者社区带来了新的活力。本文将探讨 GPT-4o mini 模型的特性,以及它如何帮助…

K8S第二节:kubeadm搭建K8s集群

上回书说到什么是K8s,这回就在我自己的虚拟机上搭建一个K8s集群; 一、安装K8S需要的软件包 yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 其中: kubelet:是K8s集群中每个node节点上的管家,用来处理Master节点下发到本节点的…

深入源码:解析SpotBugs (5)BugReportor

常见的 Bug 定位后,通过 bugReport的reportBug(BugInstance) 方法,将bug 发布出来。 一般的 Detector 经检测后会调用 bugReportor.reportBug 方法或者 BugAccumulator.accumulateBug 。 在GUI中,分析结束后会在下框…

楼宇智能化仿真实训室解决方案

在信息技术的浪潮中,智慧城市作为未来城市发展的新形态,正以前所未有的速度在全球范围内兴起。其中,楼宇智能化作为智慧城市的关键构成,扮演着举足轻重的角色。它不仅提升了建筑的能源效率、安全性与舒适度,还促进了城…

WIFI7:引领智能驾驶新未来

近年来,智能驾驶技术飞速发展,从最初的初级的辅助驾驶逐步迈向高度自动驾驶,这一变化历程深刻依赖的是高效、稳定且前沿的无线通信技术的支撑。WIFI7,作为无线通信领域的最新里程碑,凭借其前所未有的性能提升与功能拓展…

这些才是电脑该装的,5款软件良心且实用,别让它们寒心

为什么别人的电脑,开机无广告,使用0卡顿,下载资源快的飞起,网页就是简洁画面。 而自己的电脑却.....开机超过1%,广告一大堆,下载速度差之千里,网页全是“是兄弟,就来砍我”的船新版…

奥运会被误报的韩国国旗,有多少AI能准确识别?结果出人意料!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

飞创直线模组桁架机械手优势及应用领域

随着工业自动化和智能制造的发展,直线模组桁架机械手极大地减轻了人类的体力劳动负担,在危险性、重复性高的作业环境中展现出了非凡的替代能力,引领着工业生产向自动化、智能化方向迈进。 一、飞创直线模组桁架机械手优势 飞创直线模组桁架…

Spring Boot集成udp通讯

Spring Boot集成udp通讯 加入依赖编辑配置文件配置相关属性具体业务类客户端调试 加入依赖 <!--加入UDP通信所需依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId&…

【PCB设计原则5】-PCB设计的寄生元件

寄生电容 在PCB上布两条靠近的走线&#xff0c;很容易形成寄生电容。由于这种电容的存在&#xff0c;在一条走线上的快速电压变化&#xff0c;可在另一条走线上产生电流信号。 设计电路板时&#xff0c;放置两条彼此靠近的走线就会产生寄生电容。例如,在不同的两层&#xff0c…

OJ-0731

题目 题解 参考 import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNext()) {int xmh scanner.nextInt();int n scanner.nextInt();int[] COs …

SFP, SFP+,QSFP光模块封装类型

前言&#xff1a; 本文是自己对SFP, SFP,QSFP光模块封装类型的学习记录&#xff0c;所有的资料都搜集字引用链接里的博客内容&#xff0c;本文更多的是自己的学习笔记记录所以可能会有一些理解错误&#xff0c;请更多的参考引用链接里的信息来源。 引用&#xff1a; 认识SFP/SF…

Arduino Mega 2560开发板的引脚分配图及说明,以及链接can的方法

与Arduino Uno相比,Arduino Mega2560的资源就丰富多了,它具有54个数字I/O口(其中14个可提供PWM输出),16个模拟I/O口,4对串行数据通信口(UART),一个复位开关,一个ICSP下载口,支持USB接口和直流电源供电,具体的资源分配见下图。 Arduino Mega 2560开发板的引脚分配…

nginx代理设置时能获取到源IP地址的方法

nginx通过http_x_forwarded_for限制来访IP示例_ngnix 根据header的x-forwarded-for限制接入-CSDN博客 名称ip客户端地址10.0.23.90nginx服务器地址110.0.202.48:18888&#xff0c;代理到10.0.204.82:8888nginx服务器地址210.0.204.82:8888&#xff0c;代理到10.0.204.82:8887后…

Yarn UI 时间问题,相差8小时

位置 $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-2.6.1.jar 查看 jar tf hadoop-yarn-common-2.6.1.jar |grep yarn.dt.plugins.js webapps/static/yarn.dt.plugins.js 解压 jar -xvf hadoop-yarn-common-2.6.1.jar webapps/static/yarn.dt.plugins.js inflated: we…

Windows本地构建镜像推送远程仓库

下载 Docker Desktop https://smartidedl.blob.core.chinacloudapi.cn/docker/20210926/Docker-win.exe 使用本地docker构建镜像和推送至远程仓库&#xff08;harbor&#xff09; 1、开启docker的2375端口 2、配置远程仓库push镜像可以通过http harbor.soujer.com:5000ps&am…

【转型必看】Java到AI,程序员的逆袭秘籍,转行人工智能不再是梦!

随着技术的不断进步&#xff0c;人工智能&#xff08;AI&#xff09;已经成为当今科技领域最热门的话题之一。许多开发者开始考虑从传统的软件开发领域&#xff0c;如Java&#xff0c;转向人工智能领域&#xff0c;今天小编和大家一起来探讨Java开发者是否可以转型到人工智能&a…