PyQt6 QTableWidget表格控件

锋哥原创的PyQt6视频教程:

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库QTDesigner安装与配置、第3讲 PyQt6第一个程序HelloWorld实现等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV11C4y1P7fj/

PyQt6提供了两种表格控件,分别是TableWidget和TableView,其中,TableView是基于模型的,它是TableWidget的父类,使用TableView时,首先需要建立模型,然后再保存数据;而TableWidget是TableView的升级版本,它已经内置了一个数据存储模型QTableWidgetItem,我们在使用时,不必自己建立模型,而直接使用setItem()方法即可添加数据。所以在实际开发时,推荐使用TableWidget控件作为表格。

由于QTableWidget类继承自QTableView,因此,它具有QTableView的所有公共方法,另外,它还提供了一些自身特有的方法。

QTableWidget类的常用方法:

方法说明
setRowCount()设置表格的行数
setColumnCount()设置表格的列数
setHorizontalHeaderLabels()设置表格中的水平标题名称
setVerticalHeaderLabels()设置表格中的垂直标题名称
setltem()设置每个单元格中的内容
setCellWidget()设置单元格的内容为QWidget控件
resizeColumnsToContents()使表格的列的宽度跟随内容改变
resizeRowsToContents()使表格的行的高度跟随内容改变
setEditTriggers()设置表格是否可以编辑,取值如下。 QAbstractltem View.NoEditTriggers0No:不能编辑表格内容; QAbstractItemView.CurrentChanged1Editing:允许对单元格进行编辑; QAbstractItemView.DoubleClicked2Editing:双击时可以编辑单元格; QAbstractItemView.SelectedClicked4Editing:单击时可以编辑单元格; QAbstractItemView.EditKeyPressed8Editing:按修改键时可以编辑单元格; QAbstractItemView.AnyKeyPressed16Editing:按任意键都可以编辑单元格
setSpan()合并单元格,该方法的4个参数如下。 row:要改变的单元格的行索引; column:要改变的单元格的列索引; rowSpanCount:需要合并的行数; columnSpanCount:需要合并的列数
setShowGrid()设置是否显示网格线,默认不显示
setSelectionBehavior()设置表格的选择行为,取值如下。 QAbstractItemView.SelectItemsOSelecting:选中当前单元格; QAbstractItemView.SelectRows1Selecting:选中整行; QAbstractItem View.DoubleClicked2Editing:选中整列
setTextAlignment()设置单元格内文字的对齐方式,取值如下。 Qt.AlignLeft:与单元格左边缘对齐; Qt.AlignRight:与单元格右边缘对齐; Qt.AlignHCenter:单元格内水平居中对齐; Qt.AlignJustify:单元格内两端对齐; Qt.AlignTop:与单元格顶部边缘对齐; Qt.AlignBottom:与单元格底部边缘对齐; Ot.Align VCenter:单元格内垂直居中对齐
setAlternatingRowColors()设置表格颜色交错显示
setColumnWidth()设置单元格的宽度
setRowHeight()设置单元格的高度
sortItems()设置单元格内容的排序方式,取值如下。 Qt.DescendingOrder:降序; Qt.AscendingOrder:升序
rowCount()获取表格中的行数
columnCount()获取表格中的列数
verticalHeader()获取表格的垂直标题头
horizontalHeader()获取表格的水平标题头

QTableWidgetItem类表示QTableWidget中的单元格,一个表格就是由多个单元格组成的。

QTableWidgetItem类的常用方法:

方法说明
setText()设置单元格的文本
setCheckState()设置指定单元格的选中状态,取值如下。 Qt.Checked:单元格选中; Qt.Unchecked:单元格未选中
setIcon()为单元格设置图标
setBackground()设置单元格的背景色
setForeground()设置单元格内文本的颜色
setFont()设置单元格内文本的字体
text()获取单元格的文本

如果没学过Pymsql的,可以先学习下:2024 1小时学会 Python操作Mysql数据库之pymysql模块技术(无废话版)_哔哩哔哩_bilibili

先准备sql数据脚本:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_pyqt6` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `db_pyqt6`;

/*Table structure for table `t_book` */

DROP TABLE IF EXISTS `t_book`;

CREATE TABLE `t_book` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) DEFAULT NULL COMMENT '书名',
  `type` varchar(100) DEFAULT NULL COMMENT '图书类别',
  `author` varchar(20) DEFAULT NULL COMMENT '作者',
  `publishDate` date DEFAULT NULL COMMENT '出版日期',
  `price` decimal(6,2) DEFAULT NULL COMMENT '价格',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

/*Data for the table `t_book` */

insert  into `t_book`(`id`,`name`,`type`,`author`,`publishDate`,`price`) values (1,'零基础学Python','Python','小明','2022-12-13','30.12'),(2,'Python编程 从入门到实践 第3版','Python','埃里克·马瑟斯','2022-12-12','50.12'),(3,'利用Python进行数据分析(原书第2版)','Python','韦斯·麦金尼','2021-12-12','150.32'),(4,'Python数据分析从入门到实践','Python','高春艳 刘志铭','2020-01-12','100.00'),(5,'Python编程快速上手 让繁琐工作自动化 第2版','Python','阿尔·斯维加特','2019-01-12','44.50');

UI生成代码:

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(528, 330)
        self.tableWidget = QtWidgets.QTableWidget(parent=Form)
        self.tableWidget.setGeometry(QtCore.QRect(20, 10, 481, 291))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

Main测试代码:

"""
    python加载ui文件
    作者 : 小锋老师
    官网 : www.python222.com
"""
import sys

from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPalette, QBrush, QColor, QIcon
from PyQt6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QAbstractItemView, QComboBox
from PyQt6 import uic
from pymysql import Connection

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = uic.loadUi("./QTableWidget表格控件.ui")
    table: QTableWidget = ui.tableWidget

    # 创建数据库连接
    con = Connection(
        host="localhost",  # 主机名
        port=3306,  # 端口
        user="root",  # 账户
        password="123456",  # 密码
        database="db_pyqt6"  # 指定操作的数据库
    )

    # 获取游标对象
    cursor = con.cursor()
    # 使用游标对象,执行sql语句
    cursor.execute("select * from t_book")
    # 获取查询所有结果
    result = cursor.fetchall()

    row = cursor.rowcount  # 获取记录个数,用于设置表格的行数
    vol = len(result[0])  # 获取字段数 用于设置表格的列数

    con.close()

    table.setRowCount(row)
    table.setColumnCount(vol)
    table.setHorizontalHeaderLabels(['编号', '书名', '类别', '作者', '出版日期', '价格'])

    for i in range(row):
        for j in range(vol):

            if j == 5:
                data = QTableWidgetItem(QIcon("rmb.png"), str(result[i][j]))  # 在指定列中显示图片
            else:
                data = QTableWidgetItem(str(result[i][j]))

            if j == 2:
                comobox = QComboBox()
                comobox.addItems(['Python', 'Java', "Go"])
                comobox.setCurrentIndex(0)
                table.setCellWidget(i, j, comobox)
            else:
                data.setForeground(QBrush(QColor("red")))  # 设置文本颜色
                data.setBackground(QBrush(QColor("yellow")))  # 设置背景颜色
                table.setItem(i, j, data)

    table.resizeColumnsToContents()  # 设置列宽跟随内容改变
    table.resizeRowsToContents()  # 使行高度跟随内容改变
    table.setAlternatingRowColors(True)  # 使表格颜色交错显示
    table.verticalHeader().setVisible(False)  # 隐藏垂直标题 序号
    table.horizontalHeader().setStretchLastSection(True)  # 设置最后一列自动填充容器
    table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)  # 禁止编辑单元格
    # table.sortItems(4, Qt.SortOrder.DescendingOrder)  # 设置指定列的排序方式
    # table.setSpan(2, 4, 2, 2)  # 合并指定单元格

    ui.show()

    sys.exit(app.exec())

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

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

相关文章

神经网络:优化器和全连接层

SGD(随机梯度下降) 随机梯度下降的优化算法在科研和工业界是很常用的。 很多理论和工程问题都能转化成对目标函数进行最小化的数学问题。 举个例子:梯度下降(Gradient Descent)就好比一个人想从高山上奔跑到山谷最低…

23年12月AI烟火识别系统应用案例-北京梅兰芳故居防火系统

AI烟火识别智能视频分析系统在文化遗产保护领域的应用,尤其是在梅兰芳故居防火系统的部署,是现代科技与传统文化保护结合的典范。这篇文章将详细介绍富维烟火识别系统的设计、实施及其在23年12月在北京梅兰芳故居中的应用。 背景介绍 ● 梅兰芳故居的重要…

Ubuntu20.04.2-mate上Lazarus安装与测试

简言 Lazarus采用RAD方式界面开发,一套代码可交差编译出windows、ios、android、solaris、BSD等 各平台运行的程序,在unbuntu的repo中有2.2.0版本可用,在sourceforge上有2.2.6版本和3.0.0的Rolling版可下载安装,但感觉上2.2.0和2…

【实时绘画】comfyUI 实时绘画工作流 - 投屏

原理:(可用方案) 1:利用DesignDoll(人体控制模型)comfyUI实现 实时绘制人物对话场景 2:利用krita投影 实时绘制 场景人物 3:利用posemy.art进行实时绘画 设置有关模型。如果要开启lora&#xff…

C/C++与MySQL:多线程、大并发和异步操作的实践

C/C与MySQL:多线程、大并发和异步操作的实践 在前面的文章中,我们介绍了如何使用C/C调用MYSQL API进行基本的数据库操作。然而,在实际应用中,特别是面对大量用户请求和高并发场景时,单线程的数据库操作往往显得力不从…

内网离线部署Ant Design离线文档离线api antd离线组件api

我们经常会遇到需要在内网开发不方便查看api的尴尬情况,文本用最简单的nginx,让你十分钟部署好本地的离线antd文档,想在哪用在哪用,妈妈在也不用担心我啦 1.x及以下的只要到官网下载gh-pages分支,放到nginx里&#xf…

在centos7.9上安装Jenkins的安装过程

1.jenkins的安装和配置: 安装JDK: yum install -y fontconfig java-11-openjdk # 安装目录:/usr/lib/jvm # fontconfig 是 Linux 系统中用于配置和管理字体的一种工具 下载jenkins安装包: sudo wget -O /etc/yum.repos.d/jenkins…

2017年第六届数学建模国际赛小美赛B题电子邮件中的笔迹分析解题全过程文档及程序

2017年第六届数学建模国际赛小美赛 B题 电子邮件中的笔迹分析 原题再现: 笔迹分析是一种非常特殊的调查形式,用于将人们与书面证据联系起来。在法庭或刑事调查中,通常要求笔迹鉴定人确认笔迹样本是否来自特定的人。由于许多语言证据出现在电…

Ubuntu 常用命令之 tar 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 tar 命令在 Ubuntu 系统中是用来打包和解包文件的工具。tar 命令可以将多个文件或目录打包成一个 tar 文件,也可以将 tar 文件解包成原来的文件或目录。 tar 命令的常用参数如下 c:创建一个新的 tar 文件…

记一次渗透测试信息收集(证书+c段+历史漏洞搜索)

目录 一、当资产列表挖掘不出漏洞的时候 二、信息收集之证书信息收集(部分方式) 三、信息收集之C段信息收集 四、信息收集之某网关RCE 一、当资产列表挖掘不出漏洞的时候 二、信息收集之证书信息收集(部分方式) Fofa语句&#…

JS常用方法

1、reduce()统计 (1)数组和 计算并返回给定数组 arr 中所有元素的总和 let arr [1,4,3,6,2,6] function sum(){const newArr arr.reduce((pre,item)>{return preitem})console.log(newArr);//22 } sum() 2、filter()过滤器 (1&#…

el-table 实现行拖拽排序

element ui 表格实现拖拽排序的功能&#xff0c;可以借助第三方插件Sortablejs来实现。 引入sortablejs npm install sortablejs --save组件中使用 import Sortable from sortablejs;<el-table ref"el-table":data"listData" row-key"id" …

智能优化算法应用:基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.龙格-库塔算法4.实验参数设定5.算法结果…

红队打靶练习:WINTERMUTE: 1

前言 网络扫描&#xff08;Nmap、netdiscover&#xff09; HTTP 服务枚举 使用电子邮件日志文件在浏览器中进行目录遍历 利用 SMTP RCPT 选项中的操作系统命令注入 生成 PHP 后门 (Msfvenom) 执行RCPT选项中嵌入的后门 反向连接&#xff08;Metasploit&#xff09; 导入 pytho…

一键在线获取APP公钥、包名、签名及备案信息方法介绍

​ 目录 一键在线获取APP公钥、包名、签名及备案信息方法介绍 摘要 引言 一键获取APP包信息 操作步骤 ​编辑 解析报告 总结 致谢 关键词 参考资料 声明 摘要 本文介绍了一款在线APP解析工具&#xff0c;可以一键获取APP的公钥、包名、签名等基础信息&#xff0c;…

spring依赖注入对象类型属性----外部bean的引入(bean和bean之间的引入)

文章目录 注入普通属性的方式1、set方法注入2、构造器&#xff08;构造方法&#xff09;注入 总结&#xff1a;注入对象类型属性 注入普通属性的方式 1、set方法注入 2、构造器&#xff08;构造方法&#xff09;注入 总结&#xff1a; set方法注入和构造器方法的注入&#…

C语言——高精度乘法

一、引子 高精度乘法相较于高精度加法和减法有更多的不同&#xff0c;加法和减法是一位对应一位进行操作的&#xff0c;而乘法是一个数的每一位对另一个数的每一位进行操作&#xff0c;需要的计算步骤更多。 二、核心算法 void Calculate(int num1[], int num2[], int numres…

Linux docker安装nacos

1&#xff1a;首先下载安装docker&#xff0c;这里不做描述&#xff0c;可以自行百度安装。 2&#xff1a;通过docker下载nacos&#xff0c; docker pull nacos/nacos-server:latest3&#xff1a;搭建临时nacos容器&#xff0c;此步骤的目的是为了获取nacos的配置文件和日志 …

总结两套JVM模版配置

大白话&#xff1a; 1.秒杀场景&#xff0c;Eden会设置的比较大&#xff1b; 2.FullGC是代价最高的GC&#xff0c;频率越低越好。 大白话&#xff1a; 一般情况下&#xff0c;设置JVM堆内存为物理机内存的一半&#xff0c;最大不超过3/4; -Xmn3072M - 设置新生代的内存大小&a…

『 C++ 』二叉树进阶OJ题

文章目录 根据二叉树创建字符串 &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历) &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历)Ⅱ &#x1f996;&…