如何在运行时向通过glade创建的gtk.ComboBox添加项目?

5 投票
2 回答
13193 浏览
提问于 2025-04-15 13:07

我正在使用 Glade 3 来为我正在开发的 PyGTK 应用程序创建一个 GtkBuilder 文件。这个应用程序是用来管理带宽的,所以我有一个 gtk.ComboBox 用于选择要跟踪的网络接口。

我想知道如何在运行时向 ComboBox 中添加字符串?这是我目前的代码:

self.tracked_interface = builder.get_object("tracked_interface")

self.iface_list_store = gtk.ListStore(gobject.TYPE_STRING)
self.iface_list_store.append(["hello, "])
self.iface_list_store.append(["world."])
self.tracked_interface.set_model(self.iface_list_store)
self.tracked_interface.set_active(0)

但是 ComboBox 还是空的。我试着查阅了一些资料,但结果让我更加困惑。

谢谢。

2 个回答

6

嘿,我终于可以回答我自己的问题了!

你需要在里面添加 gtk.CellRendererText,这样它才能正确显示:

self.iface_list_store = gtk.ListStore(gobject.TYPE_STRING)
self.iface_list_store.append(["hello, "])
self.iface_list_store.append(["world."])
self.tracked_interface.set_model(self.iface_list_store)
self.tracked_interface.set_active(0)
# And here's the new stuff:
cell = gtk.CellRendererText()
self.tracked_interface.pack_start(cell, True)
self.tracked_interface.add_attribute(cell, "text", 0)

当然,这个信息来自于 PyGTK 常见问题解答

感谢 Joe McBride 的修正示例

6

你也可以自己创建一个下拉框,并把它放进去,方法是使用 gtk.combo_box_new_text()。这样你就可以用gtk提供的快捷方式来 添加插入前面加删除 文本。

combo = gtk.combo_box_new_text()
combo.append_text('hello')
combo.append_text('world')
combo.set_active(0)

box = builder.get_object('some-box')
box.pack_start(combo, False, False)

撰写回答