PyQt学习随笔:ListView控件的视图和数据模型分离案例
2023-09-27 14:26:58 时间
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
请大家多多支持,点赞、评论和加关注!谢谢!**
相关文章
- 南京灵活就业人员社保缴费标准出炉!附案例!
- 机器学习:朴素贝叶斯模型算法原理(含实战案例)
- HTML入门学习笔记+详细案例
- CANN开发实践:4个DVPP内存问题的典型案例解读
- 学习笔记6:《大型网站技术架构 核心原理与案例分析》之 万无一失:网站的高可用架构
- kafka生产者的发送消息的流程以及代码案例
- 倍福电子凸轮实现案例展示
- Vue.js:使用v-model双向绑定数据案例
- 类型转换导致运行计划不走索引測试案例
- 大数据入门第十三天——离线综合案例:网站点击流数据分析
- 为什么我要用 Node.js? 案例逐一介绍
- css案例学习之ul li dl dt dd实现二级菜单
- css案例学习之父子块的margin
- 基于BP神经网络的草莓等级识别,BP神经网络的详细原理,神经网络1000案例之7
- 七月算法机器学习 6 特征工程 小案例
- 12个学习 CSS3 网站布局设计的优秀案例
- 经典网页设计:10个优秀的国外企业网站设计案例
- 《分享》学习单页网站制作的20个优秀案例
- 第29课 Rasa 3.X 项目实战:基于 Neo4j 知识库的电影对话机器人案例学习分享
- 《Spark商业案例与性能调优实战100课》第18课:商业案例之NBA篮球运动员大数据分析代码实战之核心基础数据项编写
- Spark商业案例与性能调优实战100课》第11课:商业案例之通过纯粹通过DataFrame分析大数据电影点评系仿QQ和微信、淘宝等用户群分析与实战
- 案例分享:渗透攻防Web篇-深入浅出SQL注入
- 持续集成案例学习:Docker、Java与Maven
- Python案例:使用XPath的爬虫
- 李洪强和你一起学习前端之(10)滑动门案例讲解,新闻列表
- 李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
- vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例