12 PyQt5控件之QTableView

1 官方帮助文档

Mode/view
QTableView Qt5.15帮助文档
QStandardItemModel
QStandardItem

2 基本使用

#!/usr/bin/env python3 
# -*- coding:GBK -*-
# Author: zero  
import os,sys,re 
from   PyQt5.QtWidgets import *
from   PyQt5.QtCore import  Qt
from   PyQt5.QtGui  import  QBrush,QStandardItemModel,QStandardItem



class QTableViewDemo(QWidget):
    def __init__(self):
        super(QTableViewDemo, self).__init__()
        self.setWindowTitle("QTableViewDemo")
        self.resize( 600,500 )
        self.mainlayout = QVBoxLayout(self)
        #创建表格行列
        self.tableview  = QTableView(self)
        #设置表格不可编辑
        self.tableview.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.mainlayout.addWidget(self.tableview)
        # 常规基本使用 3行 4列
        mode = QStandardItemModel(self)
        row ,col = 3, 4 
        mode.setRowCount(row)
        mode.setColumnCount(col)
        #设置表头
        #mode.setHorizontalHeaderLabels(["第一列","第二列","第三列","第4列"])
        #mode.setVerticalHeaderLabels(["第1行","第2行","第3行"])
        for i in range(col):
            mode.setHeaderData(i, Qt.Horizontal, "第%d列"%(i+1) )
        for i in range(row):
            mode.setHeaderData(i, Qt.Vertical, "第%d行"%(i+1) )
        #隐藏垂直表头
    

        #设置item
        for row in range(3):
            for col in range(4):
                item = QStandardItem("第%d行 %d列"%(row+1,col+1)) # 0开始
                mode.setItem(row,col,item)

        self.tableview.setModel(mode)

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

如下所示:
在这里插入图片描述

3 自定义mode使用

#!/usr/bin/env python3
# -*- coding:GBK -*-
# Author: zero
import os, sys, re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt,QAbstractTableModel,QModelIndex
from PyQt5.QtGui import QBrush, QStandardItemModel, QStandardItem,QColor


class MyQTableViewMode(QAbstractTableModel):
    def __init__(self):
        super(MyQTableViewMode, self).__init__()
        self.h_heads = ["姓名","年龄","薪资","备注"]
        self.names, self.ages, self.salary,self.remarks = [],[],[],[]
        self.names.extend(["张三","李四","小王","小明"])
        self.ages.extend([18, 19, 20, 21])
        self.salary.extend([1000, 2000, 4000, 8000])
        print( self.names,len(self.names))

    def rowCount(self, parent: QModelIndex) -> int:
        return  4

    def columnCount(self, parent: QModelIndex) -> int:
        return  4

    def data(self, index: QModelIndex, role):
        if not index.isValid():
            return None

        if role == Qt.DisplayRole:
            match index.column():
                case 0:
                    return self.names[index.row()]
                case 1:
                    return str(self.ages[index.row()])
                case 2:
                    return str(self.salary[index.row()])
                case _:
                    pass
                    #print(index.column())
        elif role == Qt.TextAlignmentRole: #对齐方式
            if 0 == index.column():
                return  Qt.AlignCenter
            elif 1 == index.column():
                return Qt.AlignCenter
            elif 2 == index.column():
                return Qt.AlignRight|Qt.AlignVCenter

        elif  role == Qt.BackgroundRole: #背景色
            if 0 == index.column():
                return  QColor(255,0,0)
            elif 1 == index.column():
                return QColor(0,200,0)
        elif  role == Qt.ForegroundRole: #字体颜色
            if 2 == index.column():
                return  QColor(100,100,220)
        elif  role == Qt.CheckStateRole: #选择框
            if 3 == index.column():
                return  False
        return  None


    def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...):
        if role == Qt.DisplayRole and orientation == Qt.Horizontal:
            return self.h_heads[section]

class QTableViewDemo(QWidget):
    def __init__(self):
        super(QTableViewDemo, self).__init__()
        self.setWindowTitle("QTableViewDemo")
        self.resize(600, 500)
        self.mainlayout = QVBoxLayout(self)
        # 创建表格行列
        self.tableview = QTableView(self)
        # 设置表格不可编辑
        self.tableview.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.mainlayout.addWidget(self.tableview)
        # 常规基本使用 3行 4列
        mode = MyQTableViewMode()


        self.tableview.setModel(mode)


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

效果:

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值