上記で参照しているコードの問題は、ComboBox
編集を開始したときに実際には 1 つの要素しかないため、ドロップダウン機能が役に立たなくなる (したがって非アクティブになる) ことです。あなたが望むように動作させるには、別のシグナルを使用して実行するだけself.populate_combo
です。ツリービューを作成した後に、機能させるために 2 行追加しました。
treeview = gtk.TreeView(liststore_hardware)
sel = treeview.get_selection()
sel.connect("changed", self.populate_combo)
つまり、変更された選択によってコンボが生成されるようになりました。これは、制御がメインループに戻されたときにコンボに複数の要素が含まれていることを意味していました。したがって、ドロップダウンが機能しました。
editing-started
プログラムの現在の構造には何も追加されていないため、前のシグナルもコメントアウトしました。
window.connect("destroy", lambda w: gtk.main_quit())
#self.cellrenderer_combo.connect("editing-started", self.populate_combo)
self.cellrenderer_combo.connect("edited", self.combo_changed, liststore_hardware)
編集:
考え直してみると、モデルは実行されたNone
後__init__
のものであり、上で書いたように行ごとに 1 の長さではなく、ドロップダウン機能がないことをさらに合理的にしています。
コメント:
あなたが参照したコードとそれに対する私の変更は、行の変更 (または編集) によってListStore
. どのタイプのシナリオでそれが必要になるかはよくわかりません。一方、TreeView
およびComoBox
'の内容が、ListStore
他の場所で実行された検索アクションまたはフィルタリングの結果として変化する場合は、行の変更ではなく、その検索で を呼び出す必要がありpopulate_combo
ます。
したがって、手元のコードの範囲内での代替ソリューションである上記の推奨イベントは、コメントアウトして簡単な
self.populate_combo()
関数の最後の行として追加されinit
ます。
さらに、アプリの実行中にコンボを再設定する必要があるListStore
場合、変更が大きくないと予想される場合は、毎回新しいものを作成するのではなく、現在のものを変更することをお勧めします (その場合make a new がおそらく最も速くて簡単です)。