我正在尝试使用 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 一致这里。
什么都不起作用。当我第二次打开组合框窗口时,它只是一个空白窗口。有人能帮忙吗?
答案1
问题出在窗口上。
你应该实现一个回调'删除事件'窗口小部件的信号。
def on_event_editor_delete_event(self, widget, event):
self.event_editor.hide()
return True
此回调隐藏窗口并返回 True,因此事件不会进一步传播(即窗口不会被破坏,包括您的 ComboBox)。