搜故事,从300万个故事到海量知识百科的华丽转变!

PyQt模型/视图结构编程示例:QStringListModel的用法

时间:2008-07-08

使用Python+PyQt架构编写应用软件,可以做到在兼顾软件运行效率的前提下,大大节省时间成本,加快项目的开发进度

提示:本文共有 1946 个字,阅读大概需要 4 分钟。

引言

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视图结构编辑字符串列表的功能,示例运行界面如下图所示:

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

界面设计

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

主窗口实现代码

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

其主要代码解释如下:

(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即模型/视图结构,最简单的一个QStingListModel数据模型与QListView视图组件相结合进行数据编辑及显示的例子。从这儿可以看出,在Model/View结构中,数据模型与视图组件完全是分离的,可以直接操作数据模型以修改数据,同时,在视图组件中作的修改也会自动保存到数据模型里。

如果这篇文章对你有用的话,请关注+转发+收藏+点赞吧。

看到此处说明本文对你还是有帮助的,关于“PyQt模型/视图结构编程示例:QStringListModel的用法”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
Python+PyQt架构:Graphics View快速绘图入门及坐标系统示例

Python+PyQt架构:Graphics View快速绘图入门及坐标系统示例

坐标,视图,图形,场景,架构,事件,图元,所示,状态栏,鼠标,中心,例子,函数,界面,矩形框,移动,主窗口,如下图,位置,原点,大小,控件,过程,设计,可选择,中实,信号,功能,圆形,当鼠标

2008-05-19 #小故事

Python+PyQt架构:实现一个简单的小工具之颜色拾取器

Python+PyQt架构:实现一个简单的小工具之颜色拾取器

函数,颜色,鼠标,代码,C++,信息,定时器,界面,功能,图像,例子,实时,所示,程序,类型,位置信息,如下图,颜色值,框架结构,位置,像素点,总体,布局,所在位置,所在区域,指示,控件,核心,简要,问题

2012-12-08 #经典故事

高考加油 由三视图求面积 体积

高考加油 由三视图求面积 体积

三视图,几何,底面,分析,体积,三棱柱,棱锥,棱柱,考点,表面积,典型例题分析,求面积,如图所示,几何体,直角梯形,三棱锥,公式,侧视图,斜边,放倒,答案,结构特征,视图,边长,体积计算,等腰直角三角形,面积公式,那么该,在左

2012-05-03 #经典故事

Python+PyQt架构:使用QPainter绘图及坐标变换示例

Python+PyQt架构:使用QPainter绘图及坐标变换示例

矩形框,坐标,图形,例子,函数,所示,平移,区域,功能,界面,本例,状态,过程,主界面,坐标变换,如下图,窗口类,缩放,代码,内容,图元,基础,定义,架构,测试代码,程序,设计,运行,主窗口,这种方式

2011-11-02 #短篇故事

Python+PyQt架构:使用设计师编写界面程序入门示例

Python+PyQt架构:使用设计师编写界面程序入门示例

界面,文件,设计师,工具栏,所示,设计,本例,控件,如下图,状态栏,程序,函数,资源文件,代码,工具,中不,主窗口,动作,区域,图标,水平,样式,编辑,菜单栏,关联,分割条,显示区域,下拉菜单,信号,元素

2009-06-08 #长篇故事

新手写作无从下手时 SCQA模型结构来帮忙

新手写作无从下手时 SCQA模型结构来帮忙

文章,问题,内容,工具,事实,情景,读者,冲突,事情,处境,学生,形式,方法,标题,结尾,娱乐,结构模型,中提,明托,得文,麦肯锡,芭芭拉,那当,好的,模型,东西,业绩,亲子关系,作息时间,假期作业

2018-04-14 #经典故事

坎贝尔神话之旅的套路是更优的故事结构:3星《故事模型2.0》

坎贝尔神话之旅的套路是更优的故事结构:3星《故事模型2.0》

故事,营销,神话,品牌,英雄,赋权,套路,作者,寓意,想法,营销人,产品,人们,广告,礼物,帮助你,英雄之旅,受众,大众,模式,时代,角色,营销活动,仪式,导师,战术,数字,模型,错误,鸿沟

2007-10-17 #经典故事

电子商务系统结构A卷

电子商务系统结构A卷

模型,电子商务,技术,商务,应用,客户,设计,定律,信息,参考模型,每题,分析,服务,容量规划,协议,数据,机制,用户,站点,答案,行为,资源,业务逻辑,性能模型,数据存储,用户界面,内容,事务,作用,元素

2019-11-24 #长篇故事