重新排序 TreeView 后,从 .get_model() 和 .get_path() 获取原始行号

Get original row number from .get_model() and .get_path() after TreeView was resorted

提问人:mario 提问时间:9/19/2010 最后编辑:gpoomario 更新时间:1/23/2013 访问量:1483

问:

所以我有这个 TreeView/TreeStore,我用列表中的数据填充它。我的应用程序仅使用所述列表作为参考数据。TreeStore 只是为显示而构建的。TreeView 可以通过倾斜列标题来排序。因为 .set_sort_column_id() 用于每列的初始化。

问题是,以下代码总是在显示中返回单击的行号:

# convert ListStore iter to row number
def rowno(self):
     (model, iter) = self.MY_LIST_STORE.get_selection().get_selected()
     return model.get_path(iter)[0]

它应该这样做。只要显示原始的未排序列表,这对我来说就可以了。一旦 TreeView(和 TreeStore?)被重新排序,显示的行号 () 就不再与我的原始数据存储中的行号对应。.get_path

我怎样才能映射这个?或者,如何找出哪个选定的路径号对应于最初传递的 TreeView 列表中的哪个条目?

(当然,我可以在 TreeStore 中插入一个假列来保留我的原始行号。但是必须有某种原生的方式来实现它吗?

蟒蛇 pygtk gtktreeview

评论

0赞 mario 9/21/2010
我正在添加赏金,因为我有一个未完成的错误报告;
0赞 mario 9/26/2010
亲爱的读者。一句忠告。如果您开始使用 PyGTK 编程,请不要这样做。考虑使用上面提到的 PyGTKHelpers 或 Kiwi,如果在你的项目中还不算太晚。不要和野兽一起玩。

答:

1赞 Ali Afshar 9/23/2010 #1

恭喜你,你已经进入了PyGTK所能提供的最噩梦般的东西。我不指望对此有任何赏金,但我的解决方案围绕着将您的模型包装在可排序模型和可过滤模型中。这样,您可以根据需要获取 3 个嵌套模型的各种路径和迭代器。对于这里来说,代码太极端了,但我们在PyGTKHelpers中推广了它,可以毫不费力地使用,或者复制用于你自己的实现。这是模块。

评论

0赞 mario 9/26/2010
好吧,解决方案就是解决方案。我已经得出结论,只有通过欺骗 PyGTK 才能达到这个目标,你的方法听起来很有道理,而且是可行的。有点卡在我的treeviewcolumn帮助程序代码上,但我会尝试PyGTKHelpers,特别是因为我之前已经看到过推荐的PyGTKHelpers。使用原生 python 对象作为数据存储将非常酷。
0赞 Ali Afshar 9/27/2010
pygtkehlpers.ui.ObjectList 涵盖了我们迄今为止尝试过的所有案例。如果您想要更多实时聊天,请在 freenode、irc 上 #pida。