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, QHeaderView
class 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 sys
from PyQt6 import QtCore
from PyQt6.QtGui import QFont, QBrush, QColor
from PyQt6.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QWidget, QTableWidget, QTableWidgetItem, \
QHBoxLayout
class 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基础教程,红色黑体
本文至此结束,欢迎大家阅读,感谢大家点赞关注!