2

グローバルな値のセットがあります["Foo", "Bar", "Baz", "Quux"]。my の各行は、TreeViewこれらの値のサブセットのみを処理できるエンティティを表します。たとえば、最初の行は"Foo"andを扱い"Bar"、 2 行目は"Bar"andを扱い"Quux"ます。ComboBox各行が処理できる値の 1 つを選択できるようにする列が必要です。

ただし、私が今持っているコードから、列全体は のモデルを 1 つしか持つことができませんComboBox:

crc = gtk.CellRendererCombo()
crc.set_property('model', fooValuesModel)
crc.set_property('text-column', 0)
crc.set_property('editable', True)
crc.set_property('has_entry', False)

cl = gtk.TreeViewColumn(ctitle, crc, text=i)
treeView.append_column(cl)

列全体のモデルを設定する機会は 1 回しかありません。行ごとに異なるストアを持ったり、何らかの方法で値をフィルタリングしたりする方法はありますか?

4

2 に答える 2

3

あなたが探しているのは ですgtk.TreeModelFilter。これは、別の基になるツリー モデルのフィルター処理された値を含むツリー モデルです。set_visible_func()フィルタリングされたモデルを呼び出すことで、どの行を表示するかを決定できます。

于 2010-08-26T14:55:46.477 に答える
2

これを行う別の方法もあります。

参照: http://mail.gnome.org/archives/gtk-perl-list/2005-July/msg00065.html

(これは perl ですが、python に変換するのはそれほど難しくありません)

秘密はこれです:

TreeStore をモデルとして使用する TreeView があるとします。列の 1 つは、行ごとに ListStore モデルを取得するコンボボックス セル レンダラーを使用します。

  1. ListStores を TreeStore 列に入れることができます。perl では、 type の列になりますGtk2::ListStore。もちろん、これを直接表示する TreeView に列を追加することはありません。その代わり:

  2. 'insert_column_with_attributes' を使用し、'model' 属性を TreeStore の ListStore 列に接続して、ツリービューに追加するときに、コンボボックスセル列に Treeview のその列を ListStore として使用させることができます。

  3. ツリービューに行を追加するときは、完全な ListStore を TreeStore の ListStore 列に入れるだけです。次に、行ごとの ListStore に必要な値を入力できます。

于 2011-05-03T13:39:29.620 に答える