listview - 如何上下移动多个ListStore元素

标签 listview python-3.x gtk3

我有一个Gtk.ListStore模型填充了标题和作者信息,我希望用户能够移动元素以按照他们选择的任何顺序放置它们。这意味着提供“上移”和“下移”按钮。

不幸的是,我在 this question 中找到的逻辑不与 Gtk.TreeView 合作允许选择多个元素。

Gtk.TreeSelection.get_selected()返回一个包含 Gtk.TreeIter 的元组指向当前选定的单个行,但是 Gtk.TreeSelection.get_selected_rows()返回一个包含 Gtk.TreePath 列表的元组元素。

上面链接的单选行问题的答案仅适用于 Gtk.TreeIter对象,我一直无法弄清楚如何转换 Gtk.TreePath进入Gtk.TreeIter对象。

但是,我确实找到了 Gtk.ListStore.move_above(iter, position)Gtk.ListStore.move_below(iter, position)方法,但同样,它们需要 Gtk.TreeIter工作对象。

我是否错过了对其他人来说完全显而易见的东西?

最佳答案

Gtk.ListStore.move_above(iter,position)Gtk.ListStore.move_below(iter,position) 是正确的调用方法,但事实证明相对于我正在使用的 Python 3 版本和 Gtk3 接口(interface),我正在阅读的文档实际上是错误的。
(抱歉,我不知道如何确定我正在使用哪个版本的界面)

Gtk.TreeSelection.get_selected_rows() 实际上返回一个包含 Gtk.TreeModelRow 的元组和我正在使用的模型的表示。

Gtk.TreeModelRow 包含对给定行的相应 Gtk.TreePathGtk.TreeIter 对象的引用,如变量Gtk.TreeModelRow.pathGtk.TreeModelRow.iter

所以,我的最终代码用于向上移动多个选定的行:

selection = treeView.get_selection()
selections, model = selection.get_selected_rows()

for row in selections:
    # Make sure the row we are given is actually selected
    if selection.iter_is_selected(row.iter) and row.previous != None:
        self.listData.move_before(row.iter, row.previous.iter)

以及我用于向下移动多个选定行的代码:

selection = treeView.get_selection()
selections, model = selection.get_selected_rows()

# Note: Must loop through rows in the opposite direction so as not to move a row all the way to the bottom
for i in range(len(selections)-1, -1, -1):
    row = selections[i]
    # Make sure the row we are given is actually selected
    if selection.iter_is_selected(row.iter) and row.next != None:
        self.listData.move_after(row.iter, row.next.iter)

关于listview - 如何上下移动多个ListStore元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228074/

相关文章:

python - 需要对 numpy 索引进行一些澄清吗?

python - 描述符可以用于属性来提供一些声明性信息吗?

mongodb - Pymongo 插入和查询引用

python - 重复插入从 glade 文件生成的相同 gtk 对象的副本

android - 如何在不同的线程中生成列表并填充到 ListView 中?

java - 在 ListView 中滚动时重复项目

listview - Listview 中项目之间不需要的间隙 flutter

listview - Flutter:在 ListView 中动画项目删除

python - 带有 pygobject 的 pango 属性

c++ - GTK:完全摆脱系统主题/CSS