PyQt5之QTableWidget表格数据

PyQt5之QTableWidget表格数据

QTableWidget是Qt程序中常用的显示数据表格的控件,类似于C#中的DataGrid。QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元格数据通过QTableWidgetItem来实现。

一、QTableWidget类中的常用方法

方法描述
setRowCount(int row)设置QTableWidget表格控件的行数
setColumnCount(int col)设置QTableWidget表格控件的列数
setHorizontalHeaderLabels()设置QTableWidget表格控件的水平标签
setVerticalHeaderLabels()设置QTableWidget表格控件的垂直标签
setItem(int,int,QTableWidgetItem)在QTableWidget表格控件的每个选项的单元空间里面添加控件
horizontalHeader()获得QTableWidget表格控件的表格头,以便执行隐藏
rowCount()获得QTableWidget表格控件的行数
columnCount()获得QTableWidget表格控件的列数
setEditTriggers(EditTriggers triggers)设置表格是否可编辑,设置编辑规则的枚举值
setSelectionBehavior()设置表格的选择行为
setTextAlignment()设置单元格内文字的对齐方式
setSpan(int row,int column,int rowSpanCount,int columnSpanCount)合并单元格。要改变单元格的第row行,第column列,要合并rowSpanCount行数和columnSpanCount列数
setShowGrid()在默认情况下表格的显示是有网格线的,True(显示网格线),False(不显示)
setColumnWidth(int column,int width)设置单元行格的宽度
setRowHeight(int row,int height)设置单元列格的高度

编辑规则的枚举值类型

选项描述
QAbstractItemView.NoEditTriggers0No0不能对表格内容进行修改
QAbstractItemView.CurrentChanged1Editing1任何时候都能对单元格进行修改
QAbstractItemView.DoubleClicked2Editing2双击单元格
QAbstractItemView.SelectedClicked4Editing4单击已选中的内容
QAbstractItemView.EditKeyPressed8Editing8当修改键被按下时修改单元格
QAbstractItemView.AnyKeyPressed16Editing16按任意键修改单元格
QAbstractItemView.AllEditTriggers31Editing31包括以上所有条件

表格的选择行为的枚举值类型

选项描述
QAbstractItemView.SelectItems0Selecting0选中单个单元格
QAbstractItemView.SelectRows1Selecting1选中一行
QAbstractItemView.SelectColumns2Selecting2选中一列

单元格文本的水平对齐方式

选项描述
Qt.AlignLeft将单元格的内容沿单元格的左边缘对齐
Qt.AlignRight将单元格的内容沿单元格的右边缘对齐
Qt.AlignHCenter在可用空间中,居中显示在水平方向上
Qt.AlignJustify将文本在可用空间中对齐,默认是从左到右的

单元格文本的垂直对齐方式

选项描述
Qt.AlignTop与顶部对齐
Qt.AlignBottom与底部对齐
Qt.AlignVCenter在可用空间中,居中显示在垂直方向上
Qt.AlignBaseline与基线对齐

二、QTableWidget的基本用法

import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 500, 400)
        self.setWindowTitle('QTableWidget的基本用法')

        layout = QHBoxLayout()
        table = QTableWidget()
        table.setRowCount(4)
        table.setColumnCount(3)
        layout.addWidget(table)
        table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        item1 = QTableWidgetItem('张三')
        table.setItem(0,0,item1)
        item2 = QTableWidgetItem('男')
        table.setItem(0, 1, item2)
        item3 = QTableWidgetItem('50')
        table.setItem(0, 2, item3)
        self.setLayout(layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Table()
    form.show()
    sys.exit(app.exec_())

运行效果如下:

在这里插入图片描述

  1. 设置表格头
#初始化
table = QTableWidget()
table.setRowCount(4)
table.setColumnCount(3)
#设置表格水平表头标签和垂直表头标签
table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])
table.setVerticalHeaderLabels([1,2,3,4])
  1. 设置表格头为伸缩模式
#可根据窗口大小来改变网格的大小
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  1. 将表格变为禁止编辑
#只读不可修改
table.setEditTriggers(QAbstractItemView.NoEditTriggers)
  1. 设置表格整行选中
table.setSelectionBehavior(QAbstractItemView.SelectRows)
  1. 将行和列的高度、宽度设置为与所显示内容的宽度、高度相匹配
table.resizeRowsToContents()
table.resizeColumnsToContents()
  1. 表格头的显示与隐藏
#垂直方向
table.verticalHeader().setVisible(False)
#水平方向
table.horizontalHeader().setVisible(False)
  1. 在单元格中放置控件
btn = QPushButton('修改')
btn.setDown(True)
#修改按钮大小
btn.setStyleSheet("QPushButton{margin:3px};")
#将按钮添加到单元格
table.setCellWidget(1,0,btn)
  1. 在表格中快速定位到指定行
#遍历表格查找对应的具体单元格,text为查找的项
item = table.findItems(text,QtCore.Qt.MatchExactly)
#获取行号
row = item[0].row()
#模拟鼠标滚轮快速定位到指定行
table.verticalScrollBar().setSliderPosition(row)

三、设置单元格

  1. 设置单元格文本颜色和字体加粗
item1 = QTableWidgetItem('张三')
#设置文本颜色
item1.setForeground(QBrush(QColor(255,0,0)))
#设置字体加粗和大小
item1.setFont(QFont("Times",12,QFont.Black))
table.setItem(0,0,item1)
  1. 设置单元格的排序方式
#QtCore.Qt.AscendingOrder升序
#QtCore.Qt.DescendingOrder降序
#对应的属性含义为:需要排序的列,排序方式
table.sortItems(2,QtCore.Qt.DescendingOrder)
  1. 设置单元格文本的对齐方式
#设置单元格内容右对齐并与底部对齐
item1.setTextAlignment(Qt.AlignRight|Qt.AlignBottom)
  1. 合并单元格
#设置第一行第一列的单元格占据3行1列
table.setSpan(0,0,3,1)
  1. 设置单元格大小
#将第一列的单元格宽度设置为150
table.setColumnWidth(0,150)
#将第一列的高度设置为120
table.setRowHeight(0,120)
  1. 为单元格添加图片
item = QTableWidgetItem(QIcon('图片路径''图片名称'))
  1. 获得单元格内容
table.itemClicked.connect(self.click)
def click(self,item):
      print('you selected =>'+item.text())

四、支持右键菜单

import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(300, 300, 500, 400)
        self.setWindowTitle('QTableWidget的基本用法')

        layout = QHBoxLayout()
        self.table = QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(3)
        layout.addWidget(self.table)
        self.table.setHorizontalHeaderLabels(['姓名','性别','体重(kg)'])

        item1 = QTableWidgetItem('张三')
        self.table.setItem(0,0,item1)
        item2 = QTableWidgetItem('男')
        self.table.setItem(0, 1, item2)
        item3 = QTableWidgetItem('50')
        self.table.setItem(0, 2, item3)

        item4 = QTableWidgetItem('王五')
        self.table.setItem(1, 0, item4)
        item5 = QTableWidgetItem('女')
        self.table.setItem(1, 1, item5)
        item6 = QTableWidgetItem('60')
        self.table.setItem(1, 2, item6)

        self.setLayout(layout)

        #允许右键产生菜单
        self.table.setContextMenuPolicy(Qt.CustomContextMenu)
        #将右键菜单绑定槽函数
        self.table.customContextMenuRequested.connect(self.Menu)

    def Menu(self,pos):
        row_num = -1
        for i in self.table.selectionModel().selection().indexes():
            row_num = i.row()
        # 表格中只有两行数据,所以只在前两行支持右键弹出菜单
        if row_num < 2:
            menu = QMenu()
            item1 = menu.addAction(u'选项1')
            item2 = menu.addAction(u'选项2')
            item3 = menu.addAction(u'选项3')
            action = menu.exec_(self.table.mapToGlobal(pos))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Table()
    form.show()
    sys.exit(app.exec_())

运行效果如下:

在这里插入图片描述

  • 23
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值