锋哥原创的PyQt6视频教程:
2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库QTDesigner安装与配置、第3讲 PyQt6第一个程序HelloWorld实现等,UP主更多精彩视频,请关注UP账号。https://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, QtWidgetsclass 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.translateForm.setWindowTitle(_translate("Form", "Form"))
Main测试代码:
"""python加载ui文件作者 : 小锋老师官网 : www.python222.com
"""
import sysfrom 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 Connectionif __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())