2

PyGTK で GTK+ を使用して GUI を描画しています。

TreeView 内に ComboBox を作成しました。しかし、問題は、アイテムを最初にクリックしたときに、ドロップダウンの矢印が反応しない (グレー表示されている) ことです。別の項目をクリックしてから、もう一度項目に戻って、ドロップダウンの矢印が再び反応するようにする必要がありました。

これは TreeView の ComboBox の標準ですか? 他の言語での修正があれば、それも受け入れることができます。

例はここにあります。 彼は他のいくつかの問題に直面していますが、彼のコードも問題を示しています。

4

1 に答える 1

1

上記で参照しているコードの問題は、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 がおそらく最も速くて簡単です)。

于 2012-12-26T02:30:13.900 に答える