2009-07-24 17 views
5

Estoy usando Glade 3 para crear un archivo GtkBuilder para una aplicación PyGTK en la que estoy trabajando. Es para gestionar el ancho de banda, así que tengo un gtk.ComboBox para seleccionar la interfaz de red para realizar el seguimiento.¿Cómo agrego elementos a un gtk.ComboBox creado a través de glade en tiempo de ejecución?

¿Cómo agrego cadenas al ComboBox en el tiempo de ejecución? Esto es lo que tengo hasta ahora:

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) 

Pero el ComboBox permanece vacío. Intenté RTFM, pero acabo de salir más confundido, en todo caso.

Saludos.

Respuesta

6

O simplemente puede crear e insertar el cuadro combinado de sí mismo utilizando gtk.combo_box_new_text(). A continuación, podrá utilizar los accesos directos gtk a append, insert, prepend y remove de texto.

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

¡Oye, realmente puedo responder mi propia pregunta!

hay que añadir gtk.CellRendererText en allí para que rinda realidad:

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) 

Obtenido de, por supuesto, el PyGTK FAQ.

ejemplo corregido gracias a Joe McBride

2

Sólo en caso de cualquier otra persona utiliza esta, la última línea de código debe ser:

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

en lugar de:

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

Voy a editar mi respuesta. ¡Gracias! – Bernard

Cuestiones relacionadas