ComboBoxText в Glade / GTK+3 / Python - исчезает при отображении во второй раз

Я пытаюсь реализовать выпадающий список в приложении Ubuntu, используя Glade (GTK+3) и Python. Я могу получить 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 здесь.

Ничего не работает Когда я открываю окно со списком во второй раз, это просто пустое окно. Может кто-нибудь помочь, пожалуйста?

1 ответ

Проблема заключается в окне.

Вы должны реализовать обратный вызов для сигнала "delete-event" виджета Window.

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

Этот обратный вызов скрывает окно и возвращает True, поэтому событие не распространяется дальше (т. Е. Окно не уничтожается, включая ваш ComboBox).

Другие вопросы по тегам