[PyQt] MCV模式学习-0
MCV模式学习-0
- 目的
- item-based模式
- 0.0 QStringListModel
- 0.1 QAbstractListModel
- 0.2
目的
之前的PyQt采用的是item based形式,如果多个界面要同时使用一组data,在item based情况下,如果数据较少的话,可以用signal和slot的方法解决,但是当data越来越多,界面越来越复杂的情况下,signal和slot会十分杂乱,不便于维护,这种方法肯定是不可取的。
item-based模式
from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *# TODO: =================这是一般的widget模型,item-based==========================
# TODO: 数据不能同步更新
# TODO: 在item based的情况下,我们勉强可以使用signal和slot的方法解决数据同步的问题
# TODO: 但是当数据量很多的情况下,这种方法显然是不可取的class Main(QWidget):def __init__(self):super(Main, self).__init__()self.setFixedSize(900,600)data = ['one','tow','three','four','five']list = QListWidget(self)list.addItems(data)if __name__ == '__main__':import sysapp = QApplication(sys.argv)data = ['one', 'tow', 'three', 'four', 'five']list = QListWidget()list.addItems(data)list.show()count = list.count()for i in range(count):item = list.item(i)item.setFlags(item.flags() | Qt.ItemIsEditable)combobox = QComboBox()combobox.show()combobox.addItems(data)sys.exit(app.exec_())
学习MCV的模式,目的是解决当前数据采集系统开发过程中,多个界面之间的数据同步更新问题,本节笔记采用如下模式:
DATA-----MODEL-----VIEW
0.0 QStringListModel
data------QStringListModel-----View(QListView/QCombobox)
建立两个listview和combobox,修改其中一项的话,另外两个窗口中的数据也同步更新
from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *if __name__ == '__main__':import sysapp = QApplication(sys.argv)data = ['one', 'two', 'three', 'four', 'five']list = QListView()list.show()model = QStringListModel(data)# bindlist.setModel(model)combobox = QComboBox()combobox.setModel(model)combobox.show()list_2 = QListView()list_2.setModel(model)list_2.show()sys.exit(app.exec_())
0.1 QAbstractListModel
首先建立一个model类PaletteListModel,继承自QAbstractListModel
QAbstractListModel继承自QAbstractItemModel
继承QAbstractListModel后,为了使PaletteListModel能够正常使用,还需要implement两个methods——data和rowCount
from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *# 这里弄了一个constructor
class PalettleListModel(QAbstractListModel):def __init__(self, colors = [], parent =None):# superclassQAbstractListModel.__init__(self,parent)self.__colors = colorsdef rowCount(self, parent=None, *args, **kwargs):# 抽象的一个data总量# 应该返回的是抽象数据的长度return len(self.__colors)def data(self, QModelIndex, role=None):# 返回抽象数据的indexif role == Qt.DisplayRole:return "HARDCOOED ITEMS"if __name__ == '__main__':import sysapp = QApplication(sys.argv)list = QListView()list.show()tree = QTreeView()tree.show()combobox = QComboBox()combobox.show()table = QTableView()table.show()red = QColor(255,0,0)green = QColor(0,255,0)blue = QColor(0,0,255)model = PalettleListModel(colors=[red,green,blue])list.setModel(model)tree.setModel(model)combobox.setModel(model)table.setModel(model)
# TODO: ============================================# 每个model都需要implement两个methods# 即data和row countsys.exit(app.exec_())
0.2
修改data方法,使其与data(这里是self.__colors)建立连接
这里用到Qt的以下几个Role:
- Qt.ToolTipRole
- Qt.DecorationRole
- Qt.DisplayRole
[未完待续] — 20190219
[PyQt] MCV模式学习-0相关推荐
- OAuth2.0授权码模式学习
OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...
- Android 8.0 学习(21)---Oreo的画中画模式学习
Android 8.0 Oreo的画中画模式学习 本文主要是对谷歌开发者官方微信公众号发布的Android 8.0 Oreo 画中画模式一文的学习记录. 画中画模式Picture-in-pictur ...
- Windows保护模式学习笔记(十三)—— PWTPCD
Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...
- Windows保护模式学习笔记(十二)—— 控制寄存器
Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...
- Windows保护模式学习笔记(十)—— TLB
Windows保护模式学习笔记(十)-- TLB 地址解析 10-10-12分页 2-9-9-12分页 TLB TLB结构 TLB种类 练习1:体验TLB的存在 第一步:运行代码 第二步:设置中断门描 ...
- Windows保护模式学习笔记(九)—— 2-9-9-12分页
Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...
- Windows保护模式学习笔记(七)—— PDEPTE
Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...
- Windows保护模式学习笔记(六)—— 10-10-12分页
Windows保护模式学习笔记(六)-- 10-10-12分页 基本概念 4GB内存空间 有效地址-线性地址-物理地址 有效地址与线性地址 物理地址 控制寄存器:Cr3 10-10-12分页 实验:通 ...
- Windows保护模式学习笔记(五)—— 任务段任务门
Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...
最新文章
- JavaScript中this关键字使用方法详解
- matlab fsolve()函数的使用
- SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享
- linux下的c编程
- python函数调用的一般形式_Python的函数的定义与使用示例
- Kinect2.0获取数据
- asp 生成html文件,将指定的asp文件内容生成html文件_asp技巧
- NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
- Android 六大布局之 LinearLayout( 线性布局)
- Win7-64位 Cygwin编译Redis
- 如何选择合适的离心机,有哪些重要参数——TFN FUP LB6CM 落地式低速大容量冷冻离心机
- source的作用详细讲解
- python编程竞赛规则_第十一届蓝桥杯Python规则及样题
- 波哥大BRT带来的启示
- HTML粒子漩涡特效,使用HTML5 Canvas绘制经典漩涡粒子特效
- Html5的废弃与新增全局属性及元素
- 如何使用 RenderScript实现抖音的黑金效果
- 算力进阶,谁主沉浮?
- [RN] React Native 使用精美图标库react-native-vector-icons
- 华云大咖说 | 一体机+云终端模式,何以打造媲美PC的桌面云极致体验?