私はGtk/PyGIを使用してアプリを作成していて、サイドバーを Nautilusのようなツリー で作成する必要があります。
ただし、Gtkは私に協力することを拒否します。私はGladeとGtkBuilder(1つのgchararray
列でGtkTreeStoreを作成する)と次のコードの両方を試しました:
_def create_widgets(self):
self.hbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
self.add(self.hbox)
self.treestore = Gtk.TreeStore(str)
self.treeview = Gtk.TreeView(self.treestore)
self.treestore.append(["Item 1"])
self.treestore.append(["Item 2"])
self.hbox.pack_start(self.treeview, True, True, 0)
_
どちらのバージョンでも、コードの最初のself.treestore.append()
から始まり、ライブラリのファイルをたどっていく_TypeError: Expected Gtk.TreeIter, but got StructMeta
_が発生します。
GtkTreeStoreの_.append
_もGtkTreeIterを取るためだと思いましたが、最初の引数として「0」のようなものを渡しても何も変わりません。self.treestore.get_iter("0")
のようなものを渡すと、無効なツリーであるというエラーメッセージが表示されます。パス、およびNone
を渡した場合は機能しますが、 空のウィンドウ が表示されます。
GtkTreeStoreをGtkListStoreに置き換えてみました。結果はエラーにならず、代わりに 以前とまったく同じ空のウィンドウ が表示されます。
それで、私は何が間違っているのですか?私は the docs を何度も繰り返しましたが、それでもまだわかりません。
Gtk.TreeStore
とGtk.ListStore
は、Gtk.ListStore
が行をリストとして追加するフラットリストであるのに対し、Gtk.TreeStore
は親/子データを保持するため、親をGtk.TreeIter
として、リストを行として。
parent_iter = treestore.append(None, ["parent row"])
treestore.append(parent_iter, ["child row"])
http://python-gtk-3-tutorial.readthedocs.org/en/latest/treeview.html#Gtk.TreeStore.append
空のウィンドウについては、ドキュメントの views セクションをご覧ください。
TreeStoreを使用するこのデモに出くわしました: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py