Python 将模型数据绑定到视图并更新视图的正确方法

Python 将模型数据绑定到视图并更新视图的正确方法,python,pyqt,pyqt5,model-view,Python,Pyqt,Pyqt5,Model View,我使用Python+Qt(PyQt5)工作了几次,我想知道将模型结构(比如对象的列表)绑定到视图表示(比如qlistwidts)的最有效(和正确)方法是什么,以便在修改前者时实现后者的安全高效更新(添加/删除/修改元素)。 我在考虑不同的策略,例如: 子类化列表对象,以在模型中实现请求视图中更新的on\u change方法 使用实现上述功能的另一种结构类型 每次处理模型数据更新时,只需硬调用视图更新 有什么建议吗?我想强调一下“List[MyObject]vs.QWidgetList”正是我

我使用Python+Qt(PyQt5)工作了几次,我想知道将模型结构(比如对象的
列表
)绑定到视图表示(比如
qlistwidts
)的最有效(和正确)方法是什么,以便在修改前者时实现后者的安全高效更新(添加/删除/修改元素)。 我在考虑不同的策略,例如:

  • 子类化
    列表
    对象,以在模型中实现请求视图中更新的
    on\u change
    方法
  • 使用实现上述功能的另一种结构类型
  • 每次处理模型数据更新时,只需硬调用视图更新
有什么建议吗?我想强调一下“
List[MyObject]
vs.
QWidgetList
”正是我目前正在研究的主题,但我的问题要尽可能的笼统

编辑 由于@BrenBarn和@musicamante,我开发了一个ESS模型/视图体系结构,因此的继承有助于轻松处理
QListView
下的结构数据。
唯一的缺点是每次更新模型时(插入/删除/编辑),一个手动发出的
QAbstractListModel.dataChanged
signal将被执行

Qt有一些自己的类来处理模型。你看过这样的东西吗?谢谢@BrenBarn,我不知道,我只是看了一下。实际上我不确定它能帮我做什么。我的意思是,好的,这是实现列表的另一种方式,但是我不知道子类化它而不是python中的标准列表会带来什么好处。我不确定我是否理解您的要求。在处理数据结构时,总是使用子类化(除了从非常基本的结构(如QList)中):无论使用什么视图,基础都是QAbstractItemModel,因为即使是更高级别的视图也仍然使用基础QAbstractItemModel。因此,如果需要Qt视图,除非数据结构非常简单且不需要太多交互,否则Qt模型应始终子类化。请注意,提供了基本模型:QAbstractListModel和QAbstractTableModel。对于“中间”情况,QStandarditemodel可能是一个很好的解决方案。也就是说,我仍然不明白你的问题到底是什么,因为我的印象是你在问一个建议(通常被认为是离题的)。没有“最有效的”,一般来说,这一切都取决于您的需求。感谢您的回答,我将更详细地介绍这些抽象,因为正如我所说,我在Qt非常新。但是,您是对的,我没有强调我问题的重点。它旨在研究跟踪并在每次模型更改时自动更新视图的最佳方法。我的意思是,假设非常简单的列表(无论是
QList
还是
qabstractemmodel
甚至是python
list
)通过添加/删除/修改某些项从某处更改,我应该如何有效地实现视图的自动更新