入门 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, 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基础教程,红色黑体

本文至此结束,欢迎大家阅读,感谢大家点赞关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路卿老师

大哥大姐给点吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值