The PyQt5 code porting of Model/View Programming e

the use of the Rows and Columns flags

import sys

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


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

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

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

    def data(self, index, role):
        row = index.row()
        col = index.column()
        # print("Row {}, Column {}, role {}".format(index.row() + 1, index.column() + 1, role))
        if role == Qt.DisplayRole:
            if (row == 0 and col == 1):
                return "<--left"
            if (row == 1 and col == 1):
                return "right-->"
            return "Row{}, Column{}, role{}".format(index.row() + 1, index.column() + 1, role)
        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 == 2):
                redBackground = QBrush(Qt.red)
                return redBackground
        elif role == Qt.TextAlignmentRole:
            if (row == 1 and col == 1):
                return Qt.AlignRight + Qt.AlignVCenter
        elif role == Qt.CheckStateRole:
            if (row == 1 and col == 0):
                print('CheckStateRole---------', index.data())
                return Qt.Unchecked  # Checked
            return None

    # def flags(self, index):
    #     # return super().flags(index) | Qt.ItemIsUserCheckable | Qt.ItemIsEditable | Qt.ItemIsEnabled
    #     return Qt.ItemIsSelectable|Qt.ItemIsEditable|Qt.ItemIsEnabled|Qt.ItemIsUserCheckable

    # def setData(self, index, value, role):
    #     if not index.isValid() or role != Qt.CheckStateRole:
    #         return False
    #     print('setData CheckStateRole---------', value)
    #     # self._checked[index.row()][index.column()]=value
    #     self.dataChanged.emit(index, index)
    #     return True


if __name__ == '__main__':
    app = QApplication(sys.argv)
    tableView = QTableView()
    myModel = MyModel(None)
    tableView.setModel(myModel)
    tableView.show()
    sys.exit(app.exec_())

the use of the Rows and Columns flags

The PyQt4 code porting of Model/View Programming e-ID4333709

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWebEngineCore import *
from PyQt5.QtCore import *

COLS = 4
ROWS = 8


class MyModel(QAbstractTableModel):
    def __init__(self, parent=None):
        super(MyModel, self).__init__(parent)
        self.m_gridData = [["Row{}, Column{}".format(row, column) for column in range(COLS)] for row in range(ROWS)]

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

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

        def data(self, index, role=Qt.DisplayRole):
            if (role == Qt.DisplayRole):
                return self.m_gridData[index.row()][index.column()]
            return None

        def setData(self, index, value, role=Qt.EditRole):
            if (role == Qt.EditRole):
                self.m_gridData[index.row()][index.column()] = str(value)
                return True

        def flags(self, index):
            return Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled


if __name__ == '__main__':
    app = QApplication(sys.argv)
    tableView = QTableView()
    myModel = MyModel(None)
    tableView.setModel(myModel)
    selectionModel = tableView.selectionModel()
    columnSelection = QItemSelection()
    topLeft = myModel.index(0, 1, QModelIndex())
    bottomRight = myModel.index(0, 2, QModelIndex())
    columnSelection.select(topLeft, bottomRight)
    selectionModel.select(columnSelection, QItemSelectionModel.Select | QItemSelectionModel.Columns)
    rowSelection = QItemSelection()
    topLeft = myModel.index(0, 0, QModelIndex())
    bottomRight = myModel.index(1, 0, QModelIndex())
    rowSelection.select(topLeft, bottomRight)
    selectionModel.select(rowSelection, QItemSelectionModel.Select | QItemSelectionModel.Rows)
    tableView.show()
    sys.exit(app.exec_())

2.3 A Clock inside a Table Cell

Model/View Tutorial | Qt Widgets 6.6.1

# -*- coding: utf-8 -*-
"""
@author: Taar
"""

#conversion of https://github.com/openwebos/qt/tree/master/examples/tutorials/modelview/3_changingmodel

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt as qt

class MyModel(QtCore.QAbstractTableModel):
    #notice that dataChanged is a class attribute from
    #the parent class; it's set at creation time
    #by inheritance
    def __init__(self,parent):
        super(MyModel,self).__init__(parent)
        timer = QtCore.QTimer(self)
        timer.setInterval(1000)
        timer.timeout.connect(self.timerHit)
        timer.start()

    def rowCount(self,n):
        return 2
    def columnCount(self,n):
        return 3
    def data(self,index,role):
        row = index.row()
        col = index.column()
        if role == qt.DisplayRole:
            if row == 0 and col == 0:
                return QtCore.QTime.currentTime().toString()
    def timerHit(self):
        changed_index = self.index(0,0)

        #notice that dataChanged has new
        #signature (QtCore.QModelIndex,QtCore.QModelIndex,QVector<int>)

        #and that QVector<int> are implemented as lists (of integers)

        #self.dataChanged.emit(changed_index,changed_index,[])
        #or better, indicated the changed roles :
        self.dataChanged.emit(changed_index,changed_index,[qt.DisplayRole])

if __name__ == '__main__':
    app = QtWidgets.QApplication.instance()
    if app is None:
        app= QtWidgets.QApplication(sys.argv)
    tableView = QtWidgets.QTableView()
    myModel = MyModel(None)
    tableView.setModel(myModel)
    tableView.show()
    app.exec_()
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值