Ayuda ventanas de glade

Imagen de yoplaid
0 puntos

Hola hace poco me puse a aprender python y me esta gustando lo rápido que se desarrolla (teniendo encuenta que vengo de C). A parte de Delphi que toqué hace mucho, nunca he programado con GUI. Pues bueno, mirando por ahí descubrí Glade y me parecio fantastico. Estoy desarrollando una pequeña aplicación para llebar facturas mediante glade y las librerias pygtk y pyecelerator. Mi pregunta es la siguiente, como establezco una esperie de jerarquia entre ventanas? Me explico, quiero que cuando el programa arranque me aparezca una ventana, y cuando le doy a un boton me salga otra modal para entrar un factura. Esto la consigo mediante .hide() y .show(), pero aparte de parecerme poco elegante, si cierro la ventana por la X de arriba y vuelvo a llamarla, me sale vacia.
este es el primer código que hice, en el cual me salen las dos ventanas directamente(si tengo el self.boton.connect("clicked",self.ventana2) asta que no sea "cliackeado no deveria abrirse no?)
#!/usr/bin/env python

import sys
try:
import pygtk
pygtk.require("2.0")
except:
pass
try:
import gtk
import gtk.glade
except:
sys.exit(1)
class appgui:

def __init__(self):
self.nombre="facturas.glade"
self.arbol=gtk.glade.XML (self.nombre)
self.ventana=self.arbol.get_widget("Sel_fac")
self.boton=self.arbol.get_widget("button1")
self.boton.connect("clicked",self.ventana2)
self.ventana.connect("destroy",gtk.main_quit)
self.boton2=self.arbol.get_widget("button2")
self.texto=self.arbol.get_widget("label1")

def ventana2(self, data=None):
self.nueva=self.arbol.get_widget("window2")

if __name__=="__main__":
apli=appgui()
gtk.main()
Y este es el codigo con hide() show() pero sale vacia la segunda vez(supongo que lo que pasa es que la destruyo y la vuelvo a llamar por eso sale así):
#!/usr/bin/env python

import sys
try:
import pygtk
pygtk.require("2.0")
except:
pass
try:
import gtk
import gtk.glade
except:
sys.exit(1)
class appgui:

def __init__(self):
self.nombre="facturas.glade"
self.arbol=gtk.glade.XML (self.nombre)
self.ventana=self.arbol.get_widget("Sel_fac")
self.boton=self.arbol.get_widget("button1")
self.nueva=self.arbol.get_widget("window2")
self.nueva.hide()
self.boton.connect("clicked",self.ventana2)
self.ventana.connect("destroy",gtk.main_quit)
self.boton2=self.arbol.get_widget("button2")
self.texto=self.arbol.get_widget("label1")

def ventana2(self, data=None):
self.nueva.show()

if __name__=="__main__":
apli=appgui()
gtk.main()
Supongo que una solucion sería hacer un método extra que la creara y la escondiera, y otro que la mostrara pero debe alguna forma mejor de hacerlo no?
Muchas gracias y disculpas por la parrafada.

Imagen de yoplaid
+1
0
-1

En el mensage anterior se me ha ido el sangrado, akí lo pongo bien
La versión sin .hide() ni .show() pero salen las dos

#!/usr/bin/env python

import sys
try:
 	import pygtk
	pygtk.require("2.0")
except:
  	pass
try:
	import gtk
	import gtk.glade
except:
	sys.exit(1)
class appgui:

	def __init__(self):
		self.nombre="facturas.glade"
		self.arbol=gtk.glade.XML (self.nombre)
		self.ventana=self.arbol.get_widget("Sel_fac")
		self.boton=self.arbol.get_widget("button1")
		self.boton.connect("clicked",self.ventana2)
		self.ventana.connect("destroy",gtk.main_quit)
		self.boton2=self.arbol.get_widget("button2")
		self.texto=self.arbol.get_widget("label1")
		
	def ventana2(self, data=None):
		self.nueva=self.arbol.get_widget("window2")
	
if __name__=="__main__":
	apli=appgui()
	gtk.main()

La version con .hide() y .show() pero luego sale mal

#!/usr/bin/env python

import sys
try:
 	import pygtk
	pygtk.require("2.0")
except:
  	pass
try:
	import gtk
	import gtk.glade
except:
	sys.exit(1)
class appgui:

	def __init__(self):
		self.nombre="facturas.glade"
		self.arbol=gtk.glade.XML (self.nombre)
		self.ventana=self.arbol.get_widget("Sel_fac")
		self.boton=self.arbol.get_widget("button1")
		self.nueva=self.arbol.get_widget("window2")
		self.nueva.hide()
		self.boton.connect("clicked",self.ventana2)
		self.ventana.connect("destroy",gtk.main_quit)
		self.boton2=self.arbol.get_widget("button2")
		self.texto=self.arbol.get_widget("label1")
		
	def ventana2(self, data=None):
		self.nueva.show()
	
if __name__=="__main__":
	apli=appgui()
	gtk.main()

Alguna idea? gracias

+1
0
-1
Imagen de Sanguinario_Joe
+1
0
-1

Antes de nada, puede editar tus hilos sin mas que apretar el boton de editar justo debajo del titulo, y asi no tendras que añadir un nuevo post, pa la proxima!!! ;-)

Cada vez que alguien viene con problemas con glade le digo lo mismo, cambiate a wxWidgets, inclusive tal es mi conviccion que estoy realizando un tutorial de lo mas potente:

[HOWTO] Crear nuestra primera aplicación con interfaz gráfica usando Code::Blocks y wxWidgets

Pruebalo! Ya veras como te enamora!

Ahora que he terminado los examenes espero poder seguir con el...

Saludos!!!

+1
0
-1
Imagen de yoplaid
+1
0
-1

Me lo miraré, segun tengo entendido wxWidgets es mas compatible con mac os X que glade no?
Bueno, aun así me gustaria saber como hacerlo con glade, es algo personal XD.
Muchas gracias!

+1
0
-1
Imagen de Sanguinario_Joe
+1
0
-1

Compatible con casi todo, sobretodo si usas unicode (que es el predeterminado en linux)...

Por otra parte es normal, usa un lenguaje estandar hasta la medula como es C++, tan solo hay que tener las librerias un poco tuneadas...

Aun asi yo con mac y con otros, como pueda ser KDE, no he probado, tan solo he gastado por ahora GNOME y Windows.

De hecho planeo hacer un capitulo en el tuto sobre compilar en Windows

Saludos!!!

+1
0
-1