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

时间:2009-07-24 10:01:59

标签: python gtk pygtk

我正在使用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仍然是空的。我尝试过RTFM,但是如果有的话,就会更加困惑。

干杯。

3 个答案:

答案 0 :(得分:6)

或者您可以使用gtk.combo_box_new_text()自行创建和插入组合框。然后,您就可以使用gtk快捷方式appendinsertprependremove文字。

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)

答案 1 :(得分:5)

嘿,我实际上回答了我自己的问题!

你必须在那里添加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 FAQ

通过Joe McBride

修正了示例

答案 2 :(得分:2)

以防其他人使用此代码,最后一行代码应为:

self.tracked_interface.add_attribute(cell, "text", 0)

而不是:

self.tracked_interface.(cell, "text", 0)