PyQt6 QTableWidget表格控件

发布时间:2023年12月21日

锋哥原创的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())

文章来源:https://blog.csdn.net/caoli201314/article/details/135117877
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。