入门 PyQt6 看过来(案例)18~ 表格属性
QTableWidget是常用的显示数据表格控件,是QTableView的子类,它使用标准的数据模型,并且其单元格数据是通过QTableWidgetItem对象来实现的。
QTableWidget类常用方法如下表:
方法 | 描述 |
---|---|
setRowCount(行数) | 设置表格行数 |
setColumnCount(列数) | 设置表格列数 |
setHorizontalHeaderLabels() | 设置表格水平标签 |
setVerticalHeaderLabels() | 设置表格垂直标签 |
setItem(行,列,对象) | 在表格中添加控件 |
horizontalJeader() | 获取表头,以便隐藏 |
rowCount() | 获取表格的行数 |
columnCount() | 获取表格的列数 |
setEditTriggers(参数) | 设置表格是否可编辑(QAbstractItemView.EditTrigger.X): 0:NoEditTriggers0No:不能对表格内容进行编辑 1:CurrentChanged1Editing:随时都能对单元格进行修改 2:DoubleClicked2Editing:双击单元格 4:SelectedClicked4Editing:单机已选中的内容 8:EditKeyPress8Editing:当修改键被按下时修改单元格 16:AnyKeyPressed16Editing:按任意键修改单元格 31:AllEditTriggers31Editing:包括以上所有条件 |
setSelectionBehavior(参数) | 设置表格的选择行为(QAbstractItemView.SelectionBehavior.x): 0:SelectItems0Selecting:选中单个单元格 1:SelectRows1Selecting:选中一行 2:SelectColumns2Selecting:选中一列 |
setTextAlignment(参数) | 设置单元格内文字的对齐方式 AlignLeft:沿着单元格的左边缘对齐 AlignRight:沿着单元格的右边缘对齐 AlignHCenter:剧中显示在水平方向上 AlignJustify:在可用空间中对齐,默认是从左往右 AlignTop:与顶部对齐 AlignBottom:与底部对齐 AlignVCenter:在可用空间中,居中显示在垂直方向上 AlignBaseline:与基线对齐 |
setSpan(行,列,合并行数,合并列数) | 合并单元格 |
setShowGrid() | 在默认情况下(True),表格显示网格线 |
setColumnWidth(列,宽度) | 设置单元格列的宽度 |
setRowHeight(行,高度) | 设置单元格行的高度 |
接下来用一个案例来学习一下表格QTableWidget控件的使用,先展示基本的效果:
1 创建QTableWidget对象,设置表格为6行4列。
tableWidget=QTableWidget(6,4)
不过也可以对QTableWidget对象分别设置行和列:
tableWidget=QTableWidget()
tableWidget.setRowCount(6)
tableWidget.setColumnCount(4)
2 设置表头标签
设置表格水平表头标:
tableWidget.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])
如果想设置垂直表头标签的话,需要使用下列代码,如果不设置垂直表头,默认是1,2,3...:
tableWidget.setVerticalHeaderLabels(['A','B','C','D','E','F'])
设置后变成了A,B,C,D,E,F。
对于水平方向的表头,采用以下代码进行隐藏:
tableWidget.horizontalHeader().setVisible(False)
对于垂直方向的表头,采用下列代码进行隐藏:
tableWidget.verticalHeader().setVisible(False)
3 创建QTableWidgetItem
创建QTableWidgetItem对象,赋值并加载到表格的第0行0、1、2、3列。
newItem=QTableWidgetItem("1A001")tableWidget.setItem(0,0,newItem)newItem=QTableWidgetItem("C++")tableWidget.setItem(0,1,newItem)newItem=QTableWidgetItem("120")tableWidget.setItem(0,2,newItem)newItem=QTableWidgetItem("6")tableWidget.setItem(0,3,newItem)
4 表格只读设置
如果想让表格只读,可以执行下列代码:
tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
5 表格自适应
使用下列函数设置表格为自适应的伸缩模式,即可根据窗口大小来改变单元格大小。
tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
6 设置表格选中整行
表格默认选中的是单个单元格,通过下列代码可以设置成选中整行:
tableWidget.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
7 设置单元格的宽度、高度与所显示内容的宽度高度相匹配
tableWidget.resizeColumnsToContents()
tableWidget.resizeRowsToContents()
完整代码如下:
# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 基本表格.py
Description:
Author: lzq
date:2024-07-31 22:08
------------------------------------------------
"""
import sys
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \QHBoxLayout, QAbstractItemView, QHeaderViewclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.setWindowTitle("QTableWidget测试")self.resize(450,350)tableWidget=QTableWidget(6,4)tableWidget.setHorizontalHeaderLabels(['课程编号','课程名','学时','学分'])tableWidget.setVerticalHeaderLabels(['A','B','C','D','E','F'])#设置表头不显示# tableWidget.horizontalHeader().setVisible(False)# tableWidget.verticalHeader().setVisible(False)#表格只读# tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)#自适应表格页面# tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)#选中一行# tableWidget.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)#设置单元格的宽度、高度与所显示内容的宽度高度相匹配tableWidget.resizeColumnsToContents()tableWidget.resizeRowsToContents()newItem=QTableWidgetItem("1A001")tableWidget.setItem(0,0,newItem)newItem=QTableWidgetItem("C++")tableWidget.setItem(0,1,newItem)newItem=QTableWidgetItem("120")tableWidget.setItem(0,2,newItem)newItem=QTableWidgetItem("6")tableWidget.setItem(0,3,newItem)hLayout=QHBoxLayout()hLayout.addWidget(tableWidget)self.setLayout(hLayout)if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())
8 在表格中快速定位到指定行
遍历表格查找匹配的单元格的方法:
item=self.tableWidget.findItems(text,QtCore.Qt.MatchExactly)
获取匹配的单元格行号:
row=item[0].row()
滚动到指定行以便在界面中可见:
self.tableWidget.verticalScrollBar().setSliderPosition(row)
详细实现代码如下:
# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 快速定位单元格.py
Description:
Author: lzq
date:2024-07-31 22:44
------------------------------------------------
"""
import sysfrom PyQt6 import QtCore
from PyQt6.QtGui import QFont, QBrush, QColor
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \QHBoxLayoutclass MyWidget(QWidget):def __init__(self, parent=None):super(MyWidget, self).__init__(parent)self.initUI()def initUI(self):self.setWindowTitle("")self.resize(400, 300)#创建QTableWidget表格:10行2列tableWidget=QTableWidget()tableWidget.setRowCount(10)tableWidget.setColumnCount(2)#列变量存放10个元组数据项,每个元组包含课程名和学分项list=[('计算机导论',1),('PyQt6基础教程',2),('高等数学',2),('大学英语',3),('C++',2),('数据结构',2),('Java',3),('操作系统',2),('软件工程',4),('计算机网络',4)]#分别用每一个列表项元组0项和1项作为数据创建QTableWidgetItem对象#然后设置为表格的单元格的第0个和第1个元素for i in range(10):tableWidget.setItem(i,0,QTableWidgetItem(list[i][0]))tableWidget.setItem(i,1,QTableWidgetItem(str(list[i][1])))layout=QHBoxLayout()layout.addWidget(tableWidget)self.setLayout(layout)#查找对应的单元格,查找内容是text变量中的字符串text='PyQt6基础教程'items=tableWidget.findItems(text,QtCore.Qt.MatchFlag.MatchExactly)item=items[0]#设置定位的单元格的文本字体和颜色item.setFont(QFont("黑体",14))item.setForeground(QBrush(QColor(255,0,0)))#滚动到定位的单元格row=item.row()tableWidget.verticalScrollBar().setSliderPosition(row)if __name__=='__main__':app = QApplication(sys.argv)w = MyWidget()w.show()sys.exit(app.exec())
查询出来的结果是PyQt6基础教程,红色黑体
本文至此结束,欢迎大家阅读,感谢大家点赞关注!