PyQt(Python+Qt)学习随笔:Model/View架构概述
2023-09-27 14:26:58 时间
一、引言
模型-视图-控制器(Model-View-Controller,简称MVC)是一种源于Smalltalk在构建用户界面时 广泛使用的设计模式。在《Design Patterns》一书中,Gamma等人这样描述到:“MVC由三种对象组成。模型Model是应用程序对象,视图View是其屏幕表示,控制器Controller定义用户界面对用户输入的反应方式。在MVC之前,用户界面设计倾向于将这些对象组合在一起。MVC将它们解耦以增加灵活性和重用性。”
如果将MVC架构中的视图和控制器对象组合在一起,结果就是Model/View体系结构。这还是将数据的存储方式与展现给用户的方式分开,但是基于相同的原则提供了一个更简单的框架。这种分离使得可以在几个不同的视图中显示相同的数据,并实现新类型的视图,而无需更改底层数据结构。
为了允许灵活地处理用户输入,在PyQt和Qt中引入了代理Delegate的概念,代理允许自定义数据项的呈现和编辑方式。不过老猿不准备就代理的概念展开进行介绍。
二、架构模型
2.1 架构模型图
完整的Model/View架构模型如下:
2.2、架构模型各组件功能
- 模型Model与数据源通信,为体系结构中的其他组件提供数据接口。与数据源通信的方式取决于数据源的类型(如文件、数据库、消息等)以及模型的实现方式。
- 视图View从模型Model中根据一定条件(如行号、列号等)获取模型索引,模型索引是一个指向数据项的引用。通过模型Model的模型索引,视图View可以从数据源检索数据项。
- 在标准视图中,代理Delegate展现数据项,编辑项时,代理Delegate直接使用模型索引与模型Model通信。
一般情况下Model/View可以分为上述三组:模型Models、视图Views和代理delegates。这些组件中的每一个都是由抽象类定义的,这些抽象类提供公共接口,在某些情况下还提供特性的默认实现。抽象类应该子类化,通过子类以便提供其他组件所需要的全部功能,同时特殊情况下这也可以针对特定场景编写专门的组件。
2.3、架构模型各组件通信机制
模型、视图和代理使用信号和插槽相互通信:
- 来自模型Model的信号通知视图View有关数据源所保存数据的更改
- 来自视图View的信号提供了有关用户与所显示项目的交互的信息
- 来自代理delegate的信号在数据项编辑期间用于告诉模型Model和视图View编辑器的状态
老猿Python,跟老猿学Python!
相关文章
- python.pandas read and write CSV file
- Python 自动化中三种等待时间的详解~
- python读写csv或tsv文件的几种方法
- 如何用Python进行数据分析
- Linux服务器读写python环境变量
- 103 python高级 - 内建属性
- 【2022】软件测试学习路线技术方向,python自动化测试
- python内置HTTP服务 SimpleHTTPServer
- Python爬虫-运算符与输入输出
- Python学习基础知识概要
- 【Python学习】Python解决汉诺塔问题
- 《Python和Pygame游戏开发指南》——2.3 建立一个Pygame程序
- Windows下用python编写简单GUI程序的方法
- python 数字
- python 去重
- python implementation for Qt's QDataStream(看一下QDataStream的结构)
- 华为OD机试 - 判断牌型(Python) | 机试题+算法思路+考点+代码解析 【2023】