我正在尝试向 Gtk.TreeStore 中插入一行,为此我必须从 Gtk.TreeView 传递选定的行号。我找到了 PyGTK 的解决方案,但没有找到 PyGObject 的解决方案。
对于 PyGTK,插入函数如下所示 (http://www.pygtk.org/pygtk2reference/class-gtktreestore.html#method-gtktreestore--insert):
def insert(parent, position, row=None)
位置可以这样查询:
treeview = Gtk.TreeView()
selection = treeview.get_selection()
model, iter = selection.get_selected()
path = iter.get_selected_rows()[0]
index = path.get_indices()[0]
但是在 PyGObject 中我得到了错误:
self.index = self.path.get_indices()[0]
AttributeError: 'LayerDataStore' object has no attribute 'get_indices'
如何获取行号的整数值?我是不是以一种奇怪的方式来解决这个问题?看起来解决方案应该更简单并且代码更少。
进一步阅读:
这是GTK3中插入函数的描述:
PyGTK 的类似问题:
C++ 的类似问题:
最佳答案
终于明白了。但我不确定是否有更简单的解决方案:
首先在 TreeView 上调用 select:
tree = Gtk.TreeView()
select = tree.get_selection()
select 就是一个 Gtk.TreeSelection。我们使用此对象调用 get_selected_rows():
selected_rows = select.get_selected_rows()
该函数返回 LayerDataStore 的 tuple 和选择行时的 GtkTreePath。否则 GtkTreePath 是一个空列表 []。
然后将 GtkTreePath 分配给一个变量:
path = selected_rows[1]
路径现在是 GtkTreePath 的列表,如果未选择任何内容,则为空列表[]。您可以在此处插入一个 if 函数以避免出现任何错误。
然后我们必须使用以下方法解压列表:
row = path[0]
现在变量 row 是一个 TreePath 并且 print 函数将为第一行返回 0,为第二行返回 1,依此类推。对于嵌套树,它将为第一行中的第一个嵌套对象返回 0:0,为第一行中的第二个对象返回 0:1,依此类推。
使用 get_indices 函数,我们可以将 TreePath 转换为 list:
index = row.get_indices()
打印函数现在将在第一行打印 [0],在第二行打印 [1]。第一行第一个对象的嵌套对象为[0,0],第一行第二个嵌套对象的嵌套对象为[0,1]。
因为我只对行号本身感兴趣,所以我使用此赋值来仅获取行号:
row_number = index[0]
最后将行号传递给TreeStore:
store.insert(None, row_number, [True, "New Layer")])
有用的链接:
关于gtk3 - 如何将选定的 Gtk TreeView 行传递给 Gtk TreeStore 插入函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037271/