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

请大家多多支持,点赞、评论和加关注!谢谢!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值