Glade(GTK + 3)とPythonを使用してUbuntuアプリにドロップダウンリストを実装しようとしています。 ComboBoxTextを表示して、文字列を入力できます。ただし、含まれているウィンドウを閉じてから再度開くと、コンボボックスは表示されず、完全に空白のウィンドウになります。
問題のComboBoxTextウィジェットをGladeのウィンドウに追加しました。次に、このコードをPythonプログラム:
def on_button_edit_clicked(self, widget):
""" display list of events already stored, and allow deletion """
self.combo = self.builder.get_object('combo_box')
self.store = Gtk.ListStore(str)
self.store.append(['hello'])
self.store.append(['goodbye'])
self.combo.set_model(self.store)
event_editor = self.builder.get_object("event_editor")
event_editor.show()
ウィジェットを破棄して、それが役立つかどうかを確認しました。
def on_event_editor_destroy(self, widget):
self.combo.destroy()
self.store = Gtk.ListStore(str)
self.combo.set_model(self.store)
編集:
それ以来、CellRendererTextオブジェクトを含むいくつかの代替コードを試しましたが、それでもうまくいきません。
これらは私の情報源です(残念ながら、十分な評判がないため、すべてにリンクすることはできません):
Gtk.ListStore()を作成し、次にGtk.CellRendererText()を作成し、次にGtk.ComboBox()を作成しました。これはすべて例13.3 ここ と一致していました。
何も機能しません。コンボボックスウィンドウを2回開くと、空白のウィンドウになります。誰か助けてくれますか?
問題はウィンドウにあります。
ウィンドウウィジェットの 'delete-event' シグナルのコールバックを実装する必要があります。
def on_event_editor_delete_event(self, widget, event):
self.event_editor.hide()
return True
このコールバックはウィンドウを非表示にしてTrueを返すため、イベントはそれ以上伝播されません(つまり、ComboBoxを含めてウィンドウが破棄されません)。