PyQt学习随笔:ListView控件的视图和数据模型分离案例
2024-10-02 05:05:21
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
请大家多多支持,点赞、评论和加关注!谢谢!**
最新文章
- ES5特性之Object.freeze
- 手机端开发icon的问题
- iOS 开发笔记
- centos6.5上安装Openfire 4.0.3
- WPF 显示gif
- Magento多语言功能
- 链表之求链表倒数第k个节点
- CodeForces 219C Color Stripe
- 列式存储 V.S. 行式存储
- Dragons
- Java eclipse生成doc文档
- 自定义的string类
- Disruptor的应用示例——大文件拆分
- eclipse从git拉去出现红色方块的解决办法
- PortableApps使用入门
- Java基础_Java概述
- Kaldi nnet3的fastlstm与标准LSTM
- jQuery子页面获取父页面元素并绑定事件
- python六十三课——高阶函数之sorted
- Codeforces Round #514 (Div. 2) D. Nature Reserve
热门文章
- TCP 三次握手和四次挥手图解(有限状态机)
- linux 协议栈 实现--编码小知识分析
- MySQL中EXPLAIN结果的参数详解
- TCP粘包问题的解决方案02——利用readline函数解决粘包问题
- VGA详解及色块碰撞示例
- java 关于 a==null 和 null==a, a.equals(";123";) 和“123”.equals(a)
- Django实战总结 - 快速开发一个数据库查询工具
- LeetCode 中等题解(4)
- Java基础—Java方法的调用
- pandas 对时间索引进行分割