PyQt学习随笔:ListView控件的视图和数据模型分离案例
Qt 中view类控件的目的是实现数据和模型分离,控件展示数据,数据保存在数据存储中,数据存储中的数据改变了,则控件中展示的数据跟随改变。当设计时只指定了一个控件和一个数据存储关联时,这种分离虽然也能体现,但感觉没有那么明显,但如果使用两个View控件和同一个数据存储关联时,这种分离就能更好地理解。
下面是一个案例:
案例界面如图:

该案例在左边窗口下面的按钮操作增加和删除时,右边窗口同时改变。
实现的关键代码有如下:
1、初始化时两个窗口绑定同一个数据存储,如下:
def __init__(self):
super(appmain, self).__init__()
self.setupUi(self)
self.itemmodel=QStringListModel(self) #定义数据存储
self.itemmodel.setStringList(["item1","item2"]) #数据存储初始化
self.m_ListView.setModel(self.itemmodel) #第一个窗口绑定数据存储
self.m_listViewCopy.setModel(self.itemmodel) #第二个窗口绑定同样的数据存储
2、增加一项的槽函数代码
def AddListitem(self):
count = self.itemmodel.rowCount() #取数据存储的记录数
selectindex = self.m_ListView.currentIndex() #取当前列表中选中的项的索引数据
if selectindex.isValid():Pos = selectindex.row()+1 #取索引数据在存储中的序号位置
else: Pos = count
self.itemmodel.insertRow(Pos) #插入一项
index = self.itemmodel.index(Pos,0) #取新插入项的索引数据
stritem = f'item{Pos+1}' #需要显示的内容
self.itemmodel.setData(index,stritem,Qt.DisplayRole) #数据存储新插入项的数据赋值
self.m_ListView.setCurrentIndex(index)
3、删除一项的槽函数代码
def DelListItem(self):
selected = self.m_ListView.selectedIndexes() #取当前选中的项
itemmodel = self.m_ListView.model() #取ListView控件的数据存储,这种方法是不知道数据存储实例变量时可以使用,实际上也可以直接用实例变量self.itemmodel
for i in selected:
itemmodel.removeRow(i.row()) #删除选中的项
使用PyCharm关联的项目完整代码老猿已上传资源到csdn,大家到老猿提供的ListView.rar资源文件中下载。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
请大家多多支持,点赞、评论和加关注!谢谢!**
PyQt学习随笔:ListView控件的视图和数据模型分离案例的更多相关文章
- IOS 学习笔记(5) 控件 文本视图(UITextView)的使用方法
相对于UILabell所支持的较短文本内容,UITextView对于长文本的支持更好.UITextView能够以滚动的方式全部浏览到长文本,并且就像UILabel那样,从ISO6,他也提供了对NSAt ...
- PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法
对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据 ...
- PyQt学习随笔:Model/View架构中多个视图之间选择数据项同步
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同 ...
- PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项
根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意 ...
- android中ListView控件
今天学习了ListView控件和页面跳转,下面大致介绍下: 第一步:创建显示内容的文件vlist.xml: <?xml version="1.0" encoding=&quo ...
- PyQt学习随笔:QtDesigner ListView控件列表项的初始化
在QtDesigner中设计的界面中添加ListView控件后,是没办法添加需要在ListView控件中显示的列表项.由于ListView控件只是一个展示列表项的视图控件,实现了界面与数据的分离,其要 ...
- PyQt学习随笔:ListView控件删除一项列表项的方法
ListView控件可以通过控件对应数据存储删除列表项,具体使用: 数据存储.removeRow(元素索引位置) 删除指定位置的一个列表项. 数据存储如果不知道程序定义的数据存储名,可以通过model ...
- PyQt学习随笔:ListView控件获取当前选择项的方法
通过currentIndex()可以获取listView控件的当前选择元素,如果选择了多个,则可以通过selectedIndexes()来获取选择的元素,不过这两个函数返回的是元素数据,而不是索引编号 ...
- PyQt学习随笔:ListView控件增加列表项
ListView控件如果需要增加列表项,就是在对应数据存储中插入项,这又分两种情况,一种是已知列表数据存储,一种是未知数据存储.如果是未知数据存储,可以通过: ListView控件名.model() ...
随机推荐
- leetcode147median-of-two-sorted-arrays
题目描述 有两个大小分别为m和n的有序数组A和B.请找出这两个数组的中位数.你需要给出时间复杂度在O(log (m+n))以内的算法. There are two sorted arrays A an ...
- 12装饰器及*args,**kwargs
注:参数和返回值都是一个函数. 1,无参数 def decotare1(func): def wrapper(): print("First") func() return wra ...
- spring的原理
一.pring的原理 1.1 IOC控制反转 ==> 扫描机制通过代理方式动态创建对象 扫描注解,通过反射获取类路径,动态创建对应类的对象,放置在对象池中(多线程做法,防止短时间内创建对象过多, ...
- ceph与flashcache的around模式结合启动问题
问题 通过对我们的启动流程看了下,目前是穿到一个脚本里面的,然后这个脚本是用无限循环的方式去执行一些事情,这个地方不符合松耦合的设计,一个模块做一个事情,两个并不相关的功能不要嵌入另一个脚本,否则出现 ...
- mon磁盘满重启的问题
问题 Ceph monitors 100% full filesystem, refusing start 问题原文 I have an issue with a (not in production ...
- hackrf GPS欺骗
在对GPS欺骗之前,先对GPS的知识做一个简单的介绍 GPS 系统本身非常复杂, 涉及到卫星通信等各个领域. 这里只是简单介绍一下. 我们通常所说的 GPS 全球定位系统是由美国国防部建造完成. 目前 ...
- cdh中jps显示process information unavailable问题的解决
百度的方法有两种: 第一种 1.进入/tmp 2.删除该目录下的hsperfdata_${username} 文件夹 3.再执行jps 第二种 做软连接 或者修改权限hsperfdata_${user ...
- 如何用思维导图软件MindManager制作项目管理图表
项目管理的官方解释为:运用各种相关技能.方法与工具,为满足或超越项目有关各方对项目的要求与期望,所开展的各种计划.组织.领导.控制等方面的活动. 其实使用MindManager思维导图软件来创建项目管 ...
- MyBatis的一二级缓存
一级缓存 一级缓存默认是开启的,生命周期和SqlSession相同.一个会话中每次执行一个查询操作时,会先查询二级缓存,如果二级缓存没查到或者二级缓存未开启就会从一级缓存中查询,如果一级缓存也未查到就 ...
- celery配置与基本使用
目录 1.celery配置与基本使用 1.1 安装celery 2.测试celery 2.1启动celery 1.celery配置与基本使用 1.1 安装celery # celery_task/ma ...