我正在尝试调用 Gtk3 的 GtkTreeRowReference()
功能没有任何成功。我正在尝试从 ListStore
中删除多条记录使用关联的 TreeView 的选择设置为 MULTIPLE 模式。我想保存一个TreeRowReference
对于每个 ListStore
选择中指向的项目并使用它们删除 ListStore
项,因为这些路径应该随着选择中较早到达的 ListStore 项被删除而更新。我发现很多关于使用 TreeRowReferences
的引用资料在 PyGtk 2 和 PyGObject 的教程中提到了它们的使用,但没有给出实际的例子。我尝试了很多方法来调用 GtkTreeRowReference()
没有成功。例如:
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)
产生此 fatal error 消息:"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'."
将调用更改为 TreeRowReference
, Gtk_TreeRowReference
和其他几个变体产生了相同的错误消息。
谁能告诉我如何使用 Gtk.TreeRowReference
在 PyGObject/Gtk3 中?作为一个相对较新且经验不足的 Python 程序员,同时也是 Gtk 的新手,毫无疑问,我忽略了一些非常明显的东西,但即使在互联网上进行了大量搜索后,我也被难住了。
最佳答案
现在(PyGObject + GTK+ 3)你必须使用 Gtk.TreeRowReference.new
而不是仅仅调用 Gtk.TreeRowReference
。例如,您可以使用:
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)
在最后一部分,我假设您想要获取模型中第一列的值。
关于python - 如何在 Python 中使用 Gtk3 GtkTreeRowReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10758030/