替换pyqt表模型中的所有数据

问题描述 投票:0回答:1

我正在开发一款涉及在存储库和玩家之间移动“宝石”的游戏。我正在使用 QTableView 以 QAbstractTableModel 作为模型来显示播放器的当前宝石。当应用程序初始化时,我像这样设置模型:

def __init__(self, *args, obj=None, **kwargs):
    QtWidgets.QMainWindow.__init__(self)
    Ui_Widget.__init__(self)
    
    self.setupUi(self)
    self._headers = [Color.WHITE, Color.BLUE, Color.GREEN, Color.RED, Color.BLACK]
    self.playerGemsTable = GemTableView(self.layoutWidget)
    self.gameActions = GameActions(["p1", "p2", "p3", "p4"])
    #populate the player gems table
    data:list = [ ["Currently held", self.gameActions.currentPlayer.gems]]       
    self._playerGemModel = TokenStoreModel(data, self._headers, [0])
    self.playerGemsTable.setModel(self._playerGemModel)

到目前为止,还不错。当我运行我的应用程序时,它会显示一个包含正确数据的表格。现在的问题是弄清楚如何更新模型。我不会改变个别项目。我正在调用 GameActions 类的一个方法来处理所有计算并更新所有宝石数量。我最初的想法是设置一个信号来响应成功的“保存”,然后将 _playerGemModel.data 设置为 self.gameActions.currentPlayer.gems 的新值。然而,查看 QAbstractTableModel 的可用方法,似乎没有任何方法可以进行批量更新。所有方法似乎都旨在更新特定行和列的单个值。

我错过了什么吗?遍历数据并逐项更新真的是唯一的选择吗?

python model-view-controller pyqt pyqt5 qtableview
1个回答
0
投票

表模型中用于更新数据的可用方法,

setData()
,旨在供视图使用,从那里您一次只能编辑一个数据。但你不仅限于此。您可以编写任何您喜欢的方法来批量更新数据。只需确保它发出适当的
dataChanged
信号,以便视图知道哪些数据已更改。

© www.soinside.com 2019 - 2024. All rights reserved.