3

我试图调用 Gtk3 的GtkTreeRowReference()函数但没有成功。我正在尝试ListStore使用关联的 TreeView 选择设置为 MULTIPLE 模式从 a 中删除多条记录。我想为选择中指向TreeRowReference的每个项目保存一个并使用它们来删除项目,因为这些路径应该随着选择中较早到达的 ListStore 项目被删除而更新。我在 PyGtk 2 中找到了很多关于 using 的参考,PyGObject 的教程提到了它们的使用,但没有给出实际示例。我尝试了很多方法来调用但没有成功。例如:ListStoreListStoreTreeRowReferencesGtkTreeRowReference()

hit_rows = []
for row in range(len(self.selection.get_selected_rows()):
    hit = self.selection.get_selected_rows()[row]
    hit_row = Gtk.TreeRowReference(liststore, hit)
    hit_rows.append(hit_row)

产生此致命错误消息:"TypeError: function takes at most 0 arguments (2 given)"当我的程序运行时Gtk.TreeRowReference。选择中的行已经包含对 的引用ListStore,因此仅使用选择行作为参数再次尝试,但这只是抱怨该函数仍然坚持使用 0 个参数,而我曾尝试向其传递 1 个参数。

我也尝试过这样的事情:

hit_rows = []
for row in range(len(self.selection.get_selected_rows())):
    hit = self.selection.get_selected_rows()[row]
    hit_row = hit.GtkTreeRowReference()
    hit_rows.append(hit_row)

这些努力激怒了 Python 抱怨对"AttributeError: 'ListStore' object has no attribute 'GtkTreeRowReference'."的调用变体TreeRowReferenceGtk_TreeRowReference并且其他几个变体产生了相同的错误消息。

谁能给我一个关于如何Gtk.TreeRowReference在 PyGObject/Gtk3 中使用的线索?作为一个相对较新且经验不足的 Python 程序员,也是 Gtk 的新手,毫无疑问,我忽略了一些非常明显的东西,但即使经过大量互联网搜索,我也感到难过。

4

1 回答 1

2

而不是现在调用Gtk.TreeRowReference(PyGObject + GTK+ 3) 你必须使用Gtk.TreeRowReference.new. 例如,您可以使用:

selection = treeview.get_selection()
model, paths = selection.get_selected_rows()
refs = []
for path in paths:
    refs.append(Gtk.TreeRowReference.new(model, path))

也就是treeview之前已经定义好了。然后,您可以稍后通过以下方式仔细检查:

for ref in refs:
    path = ref.get_path()
    iter = model.get_iter(path)
    value = model.get(iter, 0)[0]
    print '(%s, %s)' % (path, value)

在最后一部分中,我假设您想要获取模型中第一列的值。

于 2012-09-23T01:32:46.507 回答