[英]GenericTreeModel with PyGObject Introspection Gtk+ 3?
我正在嘗試在Python3中基於GenericTreeModel編寫自己的Gtk + 3-TreeModel,但是這個錯誤:
AttributeError:'gi.repository.Gtk'對象沒有屬性'GenericTreeModel'
是否已重命名GenericTreeModel?
提前致謝。
PyGObject最近通過pygtkcompat獲得了GenericTreeModel支持。
所以現在你應該能夠使用兼容性模塊遷移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
使用自定義iters等時,繼承自ListStore或TreeStore不起作用。
具有調用信息的存儲庫被破壞(請參閱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']
編輯:
在舊的PyGtk API中找到了你想要的東西,遺憾的是,這是一個僅限PyGtk的創作。 有了內省的東西,你只能得到Gtk直接提供的東西,所以你必須直接處理TreeModel。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.