博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5之QTableWidget表格数据
阅读量:3959 次
发布时间:2019-05-24

本文共 5983 字,大约阅读时间需要 19 分钟。

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.NoEditTriggers0No 0 不能对表格内容进行修改
QAbstractItemView.CurrentChanged1Editing 1 任何时候都能对单元格进行修改
QAbstractItemView.DoubleClicked2Editing 2 双击单元格
QAbstractItemView.SelectedClicked4Editing 4 单击已选中的内容
QAbstractItemView.EditKeyPressed8Editing 8 当修改键被按下时修改单元格
QAbstractItemView.AnyKeyPressed16Editing 16 按任意键修改单元格
QAbstractItemView.AllEditTriggers31Editing 31 包括以上所有条件

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

选项 描述
QAbstractItemView.SelectItems0Selecting 0 选中单个单元格
QAbstractItemView.SelectRows1Selecting 1 选中一行
QAbstractItemView.SelectColumns2Selecting 2 选中一列

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

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

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

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

二、QTableWidget的基本用法

import sysfrom PyQt5 import QtCorefrom 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. 设置单元格大小
#将第一列的单元格宽度设置为150table.setColumnWidth(0,150)#将第一列的高度设置为120table.setRowHeight(0,120)
  1. 为单元格添加图片
item = QTableWidgetItem(QIcon('图片路径','图片名称'))
  1. 获得单元格内容
table.itemClicked.connect(self.click)def click(self,item):      print('you selected =>'+item.text())

四、支持右键菜单

import sysfrom PyQt5 import QtCorefrom 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_())

运行效果如下:

在这里插入图片描述

转载地址:http://dtozi.baihongyu.com/

你可能感兴趣的文章
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Android 下 JNI 开发
查看>>
Mysql索引
查看>>
OGNL投影查询
查看>>
OGNL投影查询
查看>>
OGNL投影查询
查看>>
Redis之RDB和AOF持久化
查看>>
Redis之RDB和AOF持久化
查看>>