[PyGtk] Hacer destroy a un widget y cargar otro en su lugar
2009-02-04 01:16:15 GMT
Hola, estoy haciendo una pequeña interfaz para una aplicación con PyGtk+, prescindiendo de Glade y añadiendo todos los widget necesarios "a pelo".
Mi problema es que una vez creada la interfaz, tengo una barra de menus, donde tengo un widget MenuItem que al ser activado llamara a una retrollamada que quiero que destruya un widget HBox que ocupa el centro de la interfaz y que cargue otro widget HBox con un gtk.Label y un gtk.ComboEntryList. El problema es que parece ser que no obtengo bien la instancia o no consigo que la interfaz lo muestre y refresque los nuevos widgets con show() o realize().
Me gustaría saber si es posible hacer esto y como hacerlo o bien si se puede realizar por algún otro método. (que no sea utilizando Notebook) porque tendria que cargar varias hojas, ya hago esa operación varias veces.
La clase simplificada de mi aplicación es esta (lo importante esta en el método on_activate_generate):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import gtk
class GestyRoute(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_title('Gesty Route') # + Version
self.set_default_size(750, 500)
self.set_position(gtk.WIN_POS_CENTER)
self.set_gravity(gtk.gdk.GRAVITY_CENTER)
self.set_border_width(0)
self.connect("delete_event", self.on_delete_event)
self.connect("destroy_event", self.on_destroy_event)
self.add(self.__add_content())
self.show_all()
def __create_menubar(self):
setting = gtk.ImageMenuItem('Configuración')
setting.set_image(gtk.image_new_from_stock(gtk.STOCK_PREFERENCES, gtk.ICON_SIZE_MENU))
exit = gtk.ImageMenuItem('Salir')
exit.set_image(gtk.image_new_from_stock(gtk.STOCK_QUIT, gtk.ICON_SIZE_MENU))
menu_archive = gtk.Menu()
menu_archive.append(setting)
menu_archive.append(exit)
archive = gtk.MenuItem('Archivo')
archive.set_submenu(menu_archive)
generate =gtk.MenuItem('Generar')
generate.connect('activate',self.on_activate_generate)
menu_route = gtk.Menu()
menu_route.append(generate)
route = gtk.MenuItem('Rutas')
route.set_submenu(menu_route)
menubar = gtk.MenuBar()
menubar.append(archive)
menubar.append(route)
return menubar
def on_activate_generate(self,item):
# print "RUTA"
#print self.get_children()[0].get_children()[1].destroy()
#self.get_children()[0].get_children()[1].pack_start(gtk.Label("HOla"),False,False,0)
#self.show_now()
print self.subcontent
self.subcontent.destroy()
#print self.subcontent
#self.subcontent.unrealize()
print self.subcontent
#self.subcontent = gtk.VBox(False,0)
#print self.subcontent
#self.subcontent = ''
vbox = gtk.VBox(0,False)
vbox.pack_start(gtk.ComboBoxEntry(),False,False,0)
vbox.pack_start(gtk.Label("Hola"),False,False,0)
self.subcontent.pack_start(vbox,False,False,0)
#self.subcontent = gtk.Label("Hola")
print self.subcontent
self.subcontent.show_all() # No se muestra ningun widget
self.show_all()
def __create_statusbar(self):
statusbar = gtk.Statusbar()
context_id = statusbar.get_context_id('statusbar main')
statusbar.push(context_id,"Barra de estado: Aplicación cargada.")
return statusbar
def __add_content(self):
vbox = gtk.VBox(False, 0)
vbox = gtk.VBox(False, 0)
vbox.set_border_width(0)
self.menubar = self.__create_menubar()
vbox.pack_start(self.menubar, False, False, 0)
self.subcontent = self.__create_subcontent_initial()
vbox.pack_start(self.subcontent, True, True, 0)
self.statusbar = self.__create_statusbar()
vbox.pack_end(self.statusbar, False, False, 0)
return vbox
def __create_subcontent_initial(self):
return gtk.HBox(False,0)
def on_delete_event(self, widget, data = None):
gtk.main_quit()
return False
def on_destroy_event(self, widget, data = None):
gtk.main_quit()
return False
if __name__ == '__main__':
try:
GestyRoute()
gtk.main()
except KeyboardInterrupt:
print "Programa cancelado por teclado."
import sys
sys.exit(1)
--
Shakaran
Blog: www.shakaran.es
Mi proyecto de juego de rol online: www.apogeus.es
RSS Feed