web-dev-qa-db-ja.com

PythonからGtkTreeViewを作成しようとしてもうまくいかないようです

私は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 を何度も繰り返しましたが、それでもまだわかりません。

3
Andy C.

Gtk.TreeStoreGtk.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 セクションをご覧ください。

4
Timo

TreeStoreを使用するこのデモに出くわしました: http://git.gnome.org/browse/pygobject/tree/demos/gtk-demo/gtk-demo.py

0
Wayne