触发事件及QTableView的使用

书写思路

1、QT界面的窗口构建思路及常用组件
2、简易QTableView的使用(关于QTableView中的data函数定义以及role的含义)

1、QT界面的窗口构建思路及常用组件

整体思路
在QWidget 里面放一条 QVBoxLayout (你就想象成一个会帮你自动换行的容器)
QVBoxLayout 里面 先放上 QTextEdit (文本编辑组件)再放上一个 QSlider (滑动条)
最后添加一个触发器,用于改变 QTextEdit 的显示

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QSlider,
                             QVBoxLayout, QApplication, QTextEdit)


class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.num = 0
        self.initUI()

    def initUI(self):
        self.editText = QTextEdit()
        sld = QSlider(Qt.Horizontal, self)
        vbox = QVBoxLayout()
        vbox.addWidget(self.editText)

        self.setLayout(vbox)
        sld.valueChanged.connect(self.changeEditText)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('触发事件')
        self.show()

    def changeEditText(self):
        self.num += 1
        self.editText.append("current num is : "+str(self.num))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())import sys

在这里插入图片描述
显示如上,进度条的变动会触发上面editText的打印和输出窗口的打印

2、简易QTableView的使用

1、简述一下Model/View框架:
Model/View框架 也就是 模型/视图框架 ,说他们是个什么东西其实也不清楚,说说他们的好处就瞬间明白了!
在这里插入图片描述
MV框架如上图,很明显的数据和视图解耦了!这就有一个很棒得好处了,这一份data可以拿到等多个视图中使用,十分方便做数据处理!View也不需要关心我的data是怎么处理的,做一个接口,从Model里面拿就是了!
2、QTabelView的使用方式:
就如上图所示,将Data放在Model里面处理,然后通过setModel方法将Model传入QTableView中
3、继承关系图:
在这里插入图片描述
QStandardItemModel:可以作为QListView、QTableView、QTreeView的标准model。
QAbstractListModel:需要使用QListView显示数据,并配合自定义model时,我们从此类继承。
QAbstractTableModel:需要使用QTableView显示数据时,并配合自定义model时,我们从此类继承。
QAbstractItemModel:需要使用QTreeView显示数据时,并配合自定义model时,我们从此类继承。
第三点引自此
4、QTabaleView中关于 row 和 column的定义:
在这里插入图片描述

import sys
from PyQt5.QtCore import pyqtSignal, QObject, QAbstractTableModel, QModelIndex, Qt, QVariant
from PyQt5.QtGui import QFont, QBrush
from PyQt5.QtWidgets import QMainWindow, QApplication, QTableView

class MyModel(QAbstractTableModel):
    def __init__(self,parent=None):
        super(MyModel, self).__init__(parent=None)
        pass

    def rowCount(self,parent=QModelIndex()):
        return 4

    def columnCount(self,parent=QModelIndex()):
        return 5

    def data(self,index,role):
        row = index.row()
        col = index.column()
        if role == Qt.DisplayRole:
            return "(" + str(index.row() + 1) + "," + str(index.column() + 1) + ")"
        elif role == Qt.FontRole:
            if row ==0 and col == 0:
                boldFont = QFont()
                boldFont.setBold(True)
                return boldFont
        elif role == Qt.BackgroundRole:
            if row ==1 and col == 1:
                return QBrush(Qt.red)
        elif role == Qt.TextAlignmentRole:
            if row ==2 and col == 2:
                return Qt.AlignRight+Qt.AlignVCenter
        elif role == Qt.CheckStateRole:
            if row ==3 and col == 3:
                return Qt.Checked
        return QVariant()


class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.tableView = None
        self.initUI()

    def initUI(self):
        self.tableView = QTableView()
        self.myModel = MyModel()
        self.tableView.setModel(self.myModel)
        self.tableView.show()
        self.tableView.setWindowTitle("SimpleTable")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

运行结果如下
在这里插入图片描述
1、简要介绍一个下几个重要需要重写的函数:
QAbstractTableModel 是继承QAbstractItemModel,因此大部分需要重写的函数定义都在这,就上面用到的几个函数说明一下
①int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Returns the number of rows under the given parent
②int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Returns the number of columns for the children of the given parent.
③QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Returns the data stored under the given role for the item referred to by the index.
2、data中关于role的定义:
Qt.DisplayRole: 展示的内容
Qt.BackgroundRole:背景颜色
Qt.TextAlignmentRole:对齐方式
Qt.CheckStateRole: 就是我们在Andorid Unity中常见的Toggle
对照着上图的展示就明白了
更多详细定义如下:
在这里插入图片描述
上述图片链接
QTableView的API

PS这一章关于QAbstractTableModel 的定义十分重要,接下去关于更常用的QTreeView的定义也是一样的,尤其是data

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值