【原创】python3+PyQt5 使用自定义模型保存数据并通过不同视图形式展示数据

标签:
pyqt5python |
分类: PyQt5 |
本文通过将创建自定义模型保存船只数据,并会用两个不同的表格视图形式来显示同样的模型。
实现自定义模型,继承QAbstractTableModel,具体参照QT库。
import platform
from PyQt5.QtCore import (QAbstractTableModel, QDataStream, QFile,
QIODevice, QModelIndex,QVariant, Qt,pyqtSignal)
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QApplication
NAME, OWNER, COUNTRY, DESCRIPTION, TEU = range(5)
MAGIC_NUMBER = 0x570C4
FILE_VERSION = 1
class Ship(object):
def
__init__(self, name, owner, country, teu=0, description=""):
self.name = name
self.owner = owner
self.country = country
self.teu = teu
self.description = description
def
__hash__(self):
return super(Ship, self).__hash__()
def
__lt__(self, other):
return bool(self.name.lower()
def
__eq__(self, other):
return bool(self.name.lower()==other.name.lower())
class ShipTableModel(QAbstractTableModel):
dataChanged
= pyqtSignal(QModelIndex,QModelIndex)
def
__init__(self, filename=""):
super(ShipTableModel, self).__init__()
self.filename = filename
self.dirty = False
self.ships = []
self.owners = set()
self.countries = set()
def
sortByName(self):
self.beginResetModel()
self.ships = sorted(self.ships)
self.endResetModel()
def
sortByCountryOwner(self):
self.beginResetModel()
self.ships = sorted(self.ships,
key=lambda x: (x.country, x.owner, x.name))
self.endResetModel()
def
flags(self, index):
if not index.isValid():
return Qt.ItemIsEnabled
return Qt.ItemFlags(
QAbstractTableModel.flags(self, index)|
实现自定义模型,继承QAbstractTableModel,具体参照QT库。
/home/yrd/eric_workspace/chap14/ships_model/ships.py
#!/usr/bin/env python3import platform
from PyQt5.QtCore import (QAbstractTableModel, QDataStream, QFile,
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QApplication
NAME, OWNER, COUNTRY, DESCRIPTION, TEU = range(5)
MAGIC_NUMBER = 0x570C4
FILE_VERSION = 1
class Ship(object):
class ShipTableModel(QAbstractTableModel):