jueves, 2 de diciembre de 2010

Como programar una ventana de acceso en pygtk

Pues bien, mi nuevo experimento fue crear una ventana de acceso a usuarios, es decir, que pregunte el nombre de usuario y su contraseña; igualmente nada tan elaborado, pero significó un gran avance para mí en la comprensión de pygtk. En esta ocasión quise documentar un poco más para que fuera más entendible el código, que de igual forma, pueden descargar de aquí o verlo a continuación:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Importa las librerías a usar
import pygtk
# Revisa la versión requerida para usar
pygtk.require('2.0')
# Importa otra librería que se usará
import gtk

# Se crea la clase "Base" que se usará
class Base:
# Se define la función con la cual se sale de la aplicación
def salir(self, widget, data=None):
# gtk.main_quit sale sel ciclo gtk.main y termina la aplicación
gtk.main_quit()

# Se define la función para iniciar con la aplicación
def login(self):
# ven_ent se inicializa como una ventana de gtk del nivel superior
ven_ent = gtk.Window(gtk.WINDOW_TOPLEVEL)
# Se conecta el evento "delete_event" a la función "salir"
ven_ent.connect("delete_event", self.salir)
# Se dimensiona la ventana en pixeles (ancho, alto)
ven_ent.set_size_request(225,95)
# Se establece el título de la ventana
ven_ent.set_title("Acceso de Usuarios")
# Se establece la ventana como "modal" para prevenir multiples interacciones desde la misma ventana
ven_ent.set_modal(True)
# Se establece la ventana para no cambiar de tamaño
ven_ent.set_resizable(False)
# Se ubica la ventana en las coordenadas de la pantalla (X,Y)
ven_ent.move(500,300)
# Se crea una caja vertical, el primer parámetro de gtk.VBox es si es homogeneo, es decir,
# del mismo tamaño los widgets contenidos, el segundo parámetro es el espacio vertical 
# entre sus widgets
box1 = gtk.VBox(False, 3)
# Se agrega la caja a la ventana
ven_ent.add(box1)
# Se crea un caja horizontal, semejante al anterior
ct1 = gtk.HBox(True, 0)
# Se crea la etiqueta
lb_name = gtk.Label("Nombre")
# Se muestra la etiqueta
lb_name.show()
# Se empaca la etiqueta a la caja horizontal con "pack_start";
# el primer argumento es el objeto a empacar, en este caso la
# etiqueta, el segundo argumento es expand, si es True los controles
# ocupan todo el espacio disponible, si es False sólo lo que requiere;
# el tercer argumento es fill, si es True el espacio extra se usa en
# los mismos controles, si es False queda como espacio extra; el 
# cuarto argumento es el espacio entre controles a la hora de empaquetarlos
ct1.pack_start(lb_name, True, True, 3)
# Se crea una caja de entrada donde recibiremos datos del usuario
eb_name = gtk.Entry()
# Se muestra la caja de entrada
eb_name.show()
# Se empaqueta la caja de entrada, semejante a la anterior
ct1.pack_start(eb_name, True, True, 3)
# Se empaqueta la caja horizontal en la caja vertical, semejante a las anteriores;
# con esto se terminan los controles horizontales, los siguientes controles
# que se añadan tendrán un "salto de linea" por así decirlo, es decir, pasan
# al siguiente espacio vertical
box1.pack_start(ct1, True, True, 3)
# Se crea otra caja horizontal, semejante a las anteriores
ct2 = gtk.HBox(True, 0)
# Se crea la etiqueta
lb_passw = gtk.Label("Clave")
# Se muestra la etiqueta
lb_passw.show()
# Se empaqueta la etiqueta semejante a las anteriores
ct2.pack_start(lb_passw, True, True, 3)
# Se crea la caja de entrada, semejante a la anterior
eb_passw = gtk.Entry()
# Se establece la visibilidad de los datos de la caja de entrada;
# si es True, los caracteres son mostrados normalmente, si es False
# muestra asteriscos o círculos o no muestra nada, segun se especifique
# con set_invisible_char(ch)
eb_passw.set_visibility(False)
# Se muestra la caja de entrada
eb_passw.show()
# Se empaqueta la caja de entrada, semejante a la anterior
ct2.pack_start(eb_passw, True, True, 3)
# Se empaqueta la caja horizontal en la caja vertical, semejante a las anteriores;
# con esto se genera que los siguientes controles pasen al siguiente espacio vertical
box1.pack_start(ct2, True, True, 3)
# Se crea otra caja horizontal más, semejante a las anteriores
ct3 = gtk.HBox(True, 0)
# Se crea un botón con la etiqueta integrada "Aceptar"
bt_aceptar = gtk.Button("Aceptar")
# Se conecta la señal "clicked" a la función "salir"
bt_aceptar.connect("clicked", self.salir)
# Se muestra el botón
bt_aceptar.show()
# Se empaqueta el botón en la caja horizontal, semejante a las anteriores
ct3.pack_start(bt_aceptar, True, True, 3)
# Se crea otro botón con la etiqueta integrada "Cancelar"
bt_cancelar = gtk.Button("Cancelar")
# Se conecta la señal "clicked" a la función "salir"
bt_cancelar.connect("clicked", self.salir)
# Se muestra el botón
bt_cancelar.show()
# Se empaqueta el botón en la caja horizontal, semejante al anterior
ct3.pack_start(bt_cancelar, True, True, 3)
# Se empaqueta la caja horizontal en la caja vertical, semejante a las anteriores;
# con esto se genera que los siguientes controles pasen al siguiente espacio vertical
box1.pack_start(ct3, True, True, 5)
# Se muestra la caja horizontal 1
ct1.show()
# Se muestra la caja horizontal 2
ct2.show()
# Se muestra la caja horizontal 3
ct3.show()
# Se muestra la caja vertical
box1.show()
# Se muestra la ventana
ven_ent.show()
# Se define la función "__init__" que es el inicio de la aplicación desde el ciclo gtk.main
def __init__(self):
# Se llama a la función "login", nuestro verdadero inicio de la aplicación
self.login()
# Se define la función "main", que será el inicio de la aplicación desde python
def main(self):
# Se llama al ciclo principal de gtk.main
gtk.main()

if __name__ == "__main__":
base = Base()
base.main()

No hay comentarios.:

Publicar un comentario