我正在尝试在 Python3 中基于 GenericTreeModel 编写自己的 Gtk+3-TreeModel,但我出现此错误:
AttributeError: 'gi.repository.Gtk' 对象没有属性 'GenericTreeModel'
GenericTreeModel是否已重命名?
提前谢谢。
PyGObject最近通过pygtkcompat获得了GenericTreeModel支持。
这是 3.7.90中的新功能,在 3.7.91 中进行了修复
因此,现在您应该能够使用兼容性模块迁移 GenericTreeModels,至少作为开始。
所以我已经应付了一段时间了。以下是我的结果:
-
正如Havok已经说过的那样:
GenericTreeModel
不再存在,必须使用正常的gtk.TreeModel
接口并覆盖适当的方法(将它们命名为do_…
):class TreeModel(GObject.GObject, gtk.TreeModel): def do_get_iter(self, iter, path): … iter.user_data = whatever() return True
-
使用自定义迭代器等时,从列表存储或树存储继承不起作用。
-
包含调用信息的存储库已损坏(请参阅 launchpad:gtk3#1024492),因此在没有 iter 参数的情况下调用 do_get_iter 方法,因此您无法在其上设置自定义数据。要修复它,请将
/usr/share/gir-1.0/Gtk-3.0.gir
中iter
参数的方向从"out"
更改为"in"
并运行:g-ir-compiler --output=/usr/lib/girepository-1.0/Gtk-3.0.typelib /usr/share/gir-1.0/Gtk-3.0.gir
我在 PyGObject 和 Gtk 中都找不到任何对 GenericTreeModel 的引用,但我认为您正在寻找的只是 TreeModel:
http://developer.gnome.org/gtk3/stable/GtkTreeModel.html
TreeModel是接口,由ListStore,TreeModelFilter,TreeModelSort和TreeStore实现。
>>> from gi.repository import Gtk
>>> dir(Gtk.TreeModel)
['__bool__', '__class__', '__delattr__', '__delitem__', '__dict__', '__doc__',
'__format__', '__gdoc__', '__getattribute__', '__getitem__', '__gtype__', '__hash__',
'__info__', '__init__', '__iter__', '__len__', '__module__', '__new__', '__nonzero__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', '_convert_row', '_convert_value',
'_getiter', 'filter_new', 'foreach', 'get', 'get_column_type', 'get_flags', 'get_iter',
'get_iter_first', 'get_iter_from_string', 'get_n_columns', 'get_path',
'get_string_from_iter', 'get_value', 'iter_children', 'iter_has_child',
'iter_n_children', 'iter_next', 'iter_nth_child', 'iter_parent', 'iter_previous',
'ref_node', 'row_changed', 'row_deleted', 'row_has_child_toggled', 'row_inserted',
'set_row', 'sort_new_with_model', 'unref_node']
编辑:
在旧的 PyGtkAPI 中找到了您要查找的内容,遗憾的是,这是一个仅限 PyGtk 的创作。有了内省的东西,你只能得到Gtk直接提供的东西,所以你将不得不直接处理TreeModel。
希望对您有所帮助。