python3+PyQt5 使用三种不同的简便项窗口部件显示数据
来源:互联网 发布:ol3vs数据库app 编辑:程序博客网 时间:2024/06/05 23:02
python3+PyQt5 使用三种不同的简便项窗口部件显示数据
http://blog.sina.com.cn/s/blog_c22e36090102x3m5.html
本文通过将同一个数据集在三种不同的简便项窗口部件中显示。三个窗口的数据得到实时的同步,数据和视图分离。当添加或删除数据行,三个不同的视图均保持同步。数据将保存在本地文件中,而非数据库。对于小型和临时性数据集来说,这些简便窗口部件非常有用,可以用在非单独数据集中-数据自身的显示,编辑和存储。
/home/yrd/eric_workspace/chap14/ships_conv/ships.py
#!/usr/bin/env python3
import platform
from PyQt5.QtCore import QDataStream, QFile,QIODevice,Qt
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 ShipContainer(object):
def__init__(self, filename=""):
self.filename = filename
self.dirty = False
self.ships = {}
self.owners = set()
self.countries = set()
defship(self, identity):
return self.ships.get(identity)
defaddShip(self, ship):
self.ships[id(ship)] = ship
self.owners.add(str(ship.owner))
self.countries.add(str(ship.country))
self.dirty = True
defremoveShip(self, ship):
del self.ships[id(ship)]
del ship
self.dirty = True
def__len__(self):
return len(self.ships)
def__iter__(self):
for ship in self.ships.values():
yield ship
definOrder(self):
return sorted(self.ships.values())
definCountryOwnerOrder(self):
return sorted(self.ships.values(),
key=lambda x: (x.country, x.owner, x.name))