gpt4 book ai didi

python - 移动子树后如何更新 TreeModel

转载 作者:行者123 更新时间:2023-11-28 16:51:10 26 4
gpt4 key购买 nike

我有一个自定义的 GenericTreeModel,它工作得很好。现在我希望用户能够使用拖放重新排列节点,所以我将一个节点移动到数据模型中的新父节点。然而,TreeModel 希望使用 row_has_child_toggledrow_deletedrow_inserted 等方法得到通知。

显然没有 row_moved 并且调用 row_deleted(对于原始路径)和 row_inserted(对于新路径)似乎没有足够。所以我想我可能必须递归地发布这些更改。

考虑以下示例:

* A (0,)
* B (1,)
* C (1,0)
* D (1,0,0)

现在,如果我将 C 移动到 A,则会发生以下情况:

row_delete( (1,0) ) # C
row_delete( (1,0,0) ) # D
row_inserted( (0,0) ) # C'
row_inserted( (0,0,0) ) # D'
child_toggle( (0,) ) # A
child_toggle( (1,) ) # B
child_toggle( (0,1) ) # C'

但是,gtk 仍然提示模型状态不一致。我想到两件事:

  • 也许调用这些函数的顺序是相关的(如果是的话,知道怎么做吗?)
  • 技术上 child_toggle( (1,0) ) 也会发生,但是该行 a) 已经删除并且 b) row_has_child_toggled 需要一个 tree_iter 引用资料,我无法获得,因为它已不存在。

也许我在这里采用了完全错误的方法,那么最好的方法是什么?

最佳答案

弄清楚了:通过删除子树的根节点行(通知模型路径已消失并有条件地切换 parent.has_child),删除子树效果很好。插入新子树也是如此,因此我不需要递归地告诉模型内容。

但是组合很关键,所以

  1. 先删除,通知模型
  2. 然后再次插入并通知模型。

关于python - 移动子树后如何更新 TreeModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com