您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

Python+PyQt架构:Model/View结构之QStringListModel编程示例

时间:2020-10-10 10:55:29  来源:  作者:

引言

Python/ target=_blank class=infotextkey>Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快、代码少、开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开发工具之一,其在Python下的绑定是PyQt库。使用“Python+PyQt”架构编写应用软件,可以做到在兼顾软件运行效率的前提下,大大节省时间成本,加快项目的开发进度。

在Qt界面库中,Model/View即模型/视图结构可将界面组件与数据进行分离,是处理数据与界面的一种较好的方法。其中,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图与原始数据的接口。由于数据源与显示界面通过Model/View结构分离开来,因此可将一个数据模型在不同的视图中显示,也可在不修改数据模型的前提下,设计特殊的视图组件。

在Qt中,提供了一些常用的视图组件如QListView、QTreeView、QTableView等,也提供了多种预定义的数据模型,如QStringListModel、QFileSystemModel、QStandItemModel等。

其中,QStringListModel是一种比较简单的用于处理字符串列表的数据模型,它可作为QListView视图组件的数据模型,在界面上显示和编辑字符串列表。下面给出一个在Python语言下使用PyQt界面库,将QStingListModel数据模型结合QListView视图组件进行数据编辑及显示的例子。

示例说明

该例使用QStringListModel作为数据模型,QListView作为视图组件,演示这种Model/View视图结构编辑字符串列表的功能,示例运行界面如下图所示:

Python+PyQt架构:Model/View结构之QStringListModel编程示例

 

在主界面上,窗口左侧包括了对QStringListModel的一些操作按钮及QListView视图组件,右侧QPlainTextEdit中可以显示当前QStringListModel中的内容,以便查看其是否与界面上ListView视图组件上显示的内容一致。最下面一行使用Label控件显示QListView视图组件上当前选中项的行、列信息。

界面设计

界面部分使用设计师设计,关于设计师设计界面的步骤可查看以前的文章,使用设计师编写界面程序入门示例。本例保存为“Main.ui”,完成后界面(左边)及窗口中涉及到的所有界面对象元素的布局情况(右边)如下图所示:

Python+PyQt架构:Model/View结构之QStringListModel编程示例

 

主窗口实现代码

主窗口类MainWnd主要实现代码如下图所示:

Python+PyQt架构:Model/View结构之QStringListModel编程示例

 

其主要代码解释如下:

(1)第21-27行,初始化函数。其中,使用QStringListModel类创建一个数据模型实例,使用setStringList函数将一个字符串列表的内容作为数据模型的初始数据内容,使用setModel函数完成数据模型与视图组件的关联,使用setEditTriggers函数设置视图组件的条目是否可以编辑以及如何进入编辑状态,本例设置为双击或选择单击列表项后就进入编辑状态。最后进行了信号与槽函数的关联。

(2)第40-44行,添加项槽函数,在列表的最后一行添加一行新内容“new item”。

(3)第46-50行,插入项槽函数,在列表当前行的前面行添加一行新内容“inserted item”。

(4)第52-54行,删除当前项槽函数,使用removeRow函数删除当前行所在的项。

(5)第56-57行,删除列表所有项槽函数,使用removeRows函数删除整个列表项。

(6)第59-60行,重新初始化列表内容。

(7)第62-63行,当单击视图组件时,其clicked()信号会传递一个QModelIndex类型的参数,利用该参数,在界面下方显示当前列表项的模型索引的行和列信息。

(8)第65-66行,清空主界面右边QPlainTextEdit的内容。

(9)第68-72行,通过数据模型的stringList函获取字符串列表,并在QPlainTextEdit里逐行显示。程序运行时,无论对ListView作了何种编辑和修改,当单击“显示数据模型列表”按钮时,在这儿显示的内容应该与ListView里总是完全相同的,即数据模型里面的数据与界面上显示的内容始终是同步的。

完整测试代码

程序完整测试代码如下图所示:

Python+PyQt架构:Model/View结构之QStringListModel编程示例

 

运行后就会出现本文开头所示的软件界面。

总结

本文给出了在Python+PyQt架构下,关于Model/View即模型/视图结构,最简单的一个QStingListModel数据模型与QListView视图组件相结合进行数据编辑及显示的例子。从这儿可以看出,在Model/View结构中,数据模型与视图组件完全是分离的,可以直接操作数据模型以修改数据,同时,在视图组件中作的修改也会自动保存到数据模型里。



Tags:Python+PyQt架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
引言Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快、代码少、开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开...【详细内容】
2020-10-10  Tags: Python+PyQt架构  点击:(166)  评论:(0)  加入收藏
▌简易百科推荐
微服务,顾名思义,就是将我们程序拆分为最小化单元来提供服务。在一体化系统中,各个微服务也是不可能独立存在的,那么微服务之间涉及到的数据依赖问题,应该怎么处理呢?我们从场景入...【详细内容】
2022-07-06  老周聊架构谈人生    Tags:微服务   点击:(17)  评论:(0)  加入收藏
本文笔者来为大家介绍下Netty的核心引擎Reactor的运转架构,希望通过本文的介绍能够让大家对Reactor是如何驱动着整个Netty框架的运转有一个全面的认识。也为我们后续进一步...【详细内容】
2022-07-05  Java码农之路    Tags: Reactor   点击:(17)  评论:(0)  加入收藏
简介SqlRunner,一个非常实用的、用于操作数据库的工具类。该类对JDBC进行了很好的封装,结合SQL工具类,能够很方便地通过Java代码执行SQL语句并检索SQL执行结果。SqlRunner提供...【详细内容】
2022-07-05  嗨皮汪小成    Tags:SqlRunner   点击:(19)  评论:(0)  加入收藏
以下文章来源于信息化与数字化 ,作者沈旸 来源:信息化与数字化导读:熟悉SAP ERP的同学可以从后往前看,有精彩的历史故事。 “开源”对企业应用和生态有什么样的影响? 在Github上...【详细内容】
2022-07-05  数字化企业    Tags:架构   点击:(16)  评论:(0)  加入收藏
自从去年 10 月份搜狗正式被腾讯合并以后,我一直想给大家讲讲腾讯内部目前开发在用的一些技术栈,我想这对同学们有很高的学习价值。但苦于公司内部有明确的规定,不允许私自对外...【详细内容】
2022-06-30  Java高级互联小课堂    Tags:微服务架构   点击:(21)  评论:(0)  加入收藏
2022-06-22  老傅解码  今日头条  Tags:混合云   点击:(24)  评论:(0)  加入收藏
采访嘉宾 | 蔡超、成国柱、谭待编辑|marsxxl在 InfoQ 成立 15 周年之际,InfoQ 编辑部发起了“2007-2022:云、运维、架构、前端的 15 年演进史”特别策划,将和业内专家共同盘点云...【详细内容】
2022-06-21  InfoQ    Tags:软件架构   点击:(32)  评论:(0)  加入收藏
2022-06-20  开猿节流    Tags:架构   点击:(28)  评论:(0)  加入收藏
微服务架构的数据一致性微服务架构下,最好的分布式数据一致性解决方案就是尽量避免分布式事务,然而,在很多场景下,分布式事务是难以避免的。在金融、电信领域中,很多业务场景要求...【详细内容】
2022-06-16  程序员高级码农II    Tags:微服务架构   点击:(33)  评论:(0)  加入收藏
想知道如何设计大型企业级的系统吗?在开始主要的代码开发之前,我们必须选择一种合适的体系架构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,应该先...【详细内容】
2022-06-16  老傅解码    Tags:架构模式   点击:(33)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条