• 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

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

  • 相关阅读:
    [AGC019F] Yes or No
    [CF1063F]String Journey
    [Gym100490A] Approximation
    [ARC058C]Iroha and Haiku
    [互测题目]大括号树
    [UVA10859]放置街灯 Placing Lampposts
    PAT甲级1141PAT Ranking of Institutions
    PAT甲级1153Decode Registration Card of PAT
    使用Python语言通过PyQt5和socket实现UDP服务器
    数据结构-哈希
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11931727.html
Copyright © 2020-2023  润新知