web-dev-qa-db-ja.com

GladeのComboBoxText / GTK + 3 / Python-2回目に表示すると消えます

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回開くと、空白のウィンドウになります。誰か助けてくれますか?

1
Jon Hudson

問題はウィンドウにあります。

ウィンドウウィジェットの 'delete-event' シグナルのコールバックを実装する必要があります。

def on_event_editor_delete_event(self, widget, event):
    self.event_editor.hide()
    return True

このコールバックはウィンドウを非表示にしてTrueを返すため、イベントはそれ以上伝播されません(つまり、ComboBoxを含めてウィンドウが破棄されません)。

2
tectux