Mi idea fue elaborar una pequeña aplicación que manejara ventanas, la idea es muy simple:
- una ventana con dos botones
- un botón abre una ventana nueva sin ocultar la ventana que la llamó
- otro botón abre una ventana nueva ocultando la ventana que la llamó
Sí, lo sé, algo simple, pero para mí significó un gran esfuerzo por tratar de comprender cómo funciona este mundillo de programación con pygtk.
A continuación pongo el código, creo yo que está lo suficientemente bien documentado, pero si tienen alguna duda, comentario o sugerencia, no duden en contactarme; o si lo prefieren, pueden descargar el fichero desde aquí.
#!/usr/bin/env python# -*- coding: utf-8 -*-
import pygtkpygtk.require('2.0')import gtk
class Base:# esta función es para conectar a la señal cuando cierro la ventana# desde la "x" para salir de la aplicacióndef delete_event(self, widget, data=None):gtk.main_quit()return False# esta función es para "ocultar" la ventana principal "mwindow" y# está conectada a la señal "clicked" del botón "Con Cerrar"def ocultar_ventana(self, widget, mwindow):mwindow.hide()
# esta función es para mostrar la ventana oculta por la función# "ocultar_ventana" y está conectada a la función "clicked" del# botón "OK"def mostrar_ventana(self, widget, mwindow):mwindow.show()
# esta función es llamada por el ciclo principal "__init__"def abrir_ventana(self):# la ventana principal modal, para evitar que abran más de una ventana# conectada a la función "delete_event" para salir de la aplicaciónmwindow = gtk.Window(gtk.WINDOW_TOPLEVEL)mwindow.connect("delete_event", self.delete_event)mwindow.set_modal(True)mwindow.set_size_request(225,25)mwindow.set_resizable(False)mwindow.move(500,300)mwindow.set_title("Ventana Principal")# caja principal que contiene a los botonesbox1 = gtk.HBox(True, 0)# añado la caja a la ventanamwindow.add(box1)# primer botón, con la etiqueta "Sin Cerrar" conectada a la# función "ventana_nueva" pasando como argumento "mwindow"# para poder ocultarla o mostrarla según sea el casoboton1 = gtk.Button("Sin Cerrar")boton1.connect("clicked", self.ventana_nueva, mwindow)boton1.show()#empaquetado del botón en la caja principalbox1.pack_start(boton1, True, True, 0)# segundo botón, con la etiqueta "Con Cerrar" conectada a la# función "ventana_nueva" y a su vez a "ocultar_ventana"# pasando como argumento a ambas funciones "mwindow"# para poder ocultarla o mostrarla según sea el casoboton2 = gtk.Button("Con Cerrar")boton2.connect("clicked", self.ventana_nueva, mwindow)boton2.connect("clicked", self.ocultar_ventana, mwindow)boton2.show()# empaquetado del botón en la caja principalbox1.pack_start(boton2, True, True, 0)# mostrar la caja principalbox1.show()# mostrar la ventana principalmwindow.show()# esta función destruye la ventana secundaria al darle click# en el botón "OK", recibe "window" como argumento para saber# qué ventana cerrardef cerrar_ventana(self, button, window):window.destroy()# esta función crea la ventana secundaria y recibe como argumento# "mwindow" para mostrar la ventana principal al clickear el# botón "OK"def ventana_nueva(self, widget, mwindow):# la ventana secundaria modal, para evitar que abran más de una ventana# conectada a la función "delete_event" para salir de la aplicaciónwindow = gtk.Window(gtk.WINDOW_TOPLEVEL)window.connect("delete_event", self.delete_event)window.set_modal(True)window.set_size_request(225,25)window.set_resizable(False)window.move(500,350)window.set_title("Ventana Secundaria")# caja principal que contiene a los botonesbox1 = gtk.HBox(True, 0)# añado la caja a la ventanawindow.add(box1)# botón "OK" para mostrar la ventana principal pasando como# argumento "mwindow" a la función "mostrar_ventana" y# "window" a la función "cerrar_ventana" para cerrar# la ventana secundariaboton1 = gtk.Button("OK")boton1.connect("clicked", self.mostrar_ventana, mwindow)boton1.connect("clicked", self.cerrar_ventana, window)boton1.show()# empaquetado del botón en la caja principalbox1.pack_start(boton1, True, True, 0)# mostrar la caja principalbox1.show()# mostrar la ventana secundariawindow.show()def __init__(self):# llamo a la función para abrir la ventana principalself.abrir_ventana()
def main(self):# inicio el ciclo principal de gtkgtk.main()if __name__ == "__main__":base = Base()base.main()
No hay comentarios.:
Publicar un comentario