【问题标题】:How to use Gtk3 GtkTreeRowReference in Python如何在 Python 中使用 Gtk3 GtkTreeRowReference
【发布时间】:2012-05-25 16:21:39
【问题描述】:

我正在尝试调用 Gtk3 的 GtkTreeRowReference() 函数,但没有成功。我正在尝试使用关联的 TreeView 选择设置为 MULTIPLE 模式从 ListStore 中删除多条记录。我想为选择中指向的每个ListStore 项目保存一个TreeRowReference,并使用它们来删除ListStore 项目,因为这些路径应该随着选择中较早到达的ListStore 项目被删除而更新。我在 PyGtk 2 中找到了很多使用 TreeRowReferences 的参考资料,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)

当我的程序遇到Gtk.TreeRowReference 行时,会产生此致命错误消息:"TypeError: function takes at most 0 arguments (2 given)"。选择中的行已经包含对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 和其他几个变体产生了相同的错误消息。

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

【问题讨论】:

  • 查看 get_selected_rows() 的文档。看起来您只需要在返回的信息中的每个路径上使用 ctor。
  • 谢谢,ergosys,我去看看。
  • 我可以得到 get_selected_rows() 返回的 Gtk.TreePath 值。我想做的是继续做文档建议做的事情,如果有人想使用这些返回值更改 TreeModel 的内容,即将它们保存为 TreeRowReferences 以便它们在项目获取时保持有效删除或移动。
  • TreeRowReference 构造函数采用路径...这不是您需要的吗?

标签: python gtk pygtk gtk3 pygobject


【解决方案1】:

现在你不能只调用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)

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

【讨论】:

  • 感谢您的帮助!我最近才注意到它,因此延迟确认它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多