簡體   English   中英

GenericTreeModel與PyGObject Introspection Gtk + 3?

[英]GenericTreeModel with PyGObject Introspection Gtk+ 3?

我正在嘗試在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 
  • 使用自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM