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).