Tutorial Básico (muy básico) de PyGTK
Últimamente he estado programando un poco con Python y pyGTK y me gustó la facilidad que tiene este lenguaje para crear intefaces de usuario. A continuación explicaré un pequeño tutorial sobre el desarrollo de un programa sencillo. Existe un muy buen tutorial en esta página http://www.pygtk.org/pygtk2tutorial-es/index.html . Muchas cosas que muestro aquí salieron de ese tutorial. La idea es generar una ventana que muestre una imagen, una etiqueta, un caja de texto y un botón. Al presionar el boton cambiará el contenido de la etiqueta, donde tendremos el siguiente resultado.
y el código para generar este programa es el siguiente:
try:
import gtk
except:
print 'Se necesita pyGTK para correr este programa'
class VentanaXalalinux(gtk.Window):
''' Ventana principal, es una clase que contiene
otras clases '''
def delete_event(self, widget, event):
print 'Se genero el evento delete'
return False
# Si devuelve True no se cierra el programa
def destroy(self, widget):
gtk.main_quit()
def __init__(self):
# Constructor de la clase
gtk.Window.__init__(self)
self.connect('delete_event', self.delete_event)
self.connect('destroy', self.destroy)
self.set_border_width(0)
self.set_title('-:: XalalinuX ::-')
self.set_role('main')
self.set_position(gtk.WIN_POS_CENTER)
# Se agrega el contenedor principal
self.contenedor = gtk.VBox()
# Cargamos una imagen
self.imagen = gtk.Image()
self.imagen.set_from_file('logo-xalalinux.png')
self.contenedor.pack_start(self.imagen, True, True)
# Creamos una etiqueta y le damos formato
self.LMensaje = gtk.Label()
self.LMensaje.set_markup('Etiqueta modificada ')
self.contenedor.pack_start(self.LMensaje, True, True)
# Creamos un contenedor horizontal para poner
# una caja de texto y un boton
self.hbox = gtk.HBox()
self.Entrada = gtk.Entry()
self.Boton = gtk.Button(stock=gtk.STOCK_APPLY)
self.Boton.connect('clicked', self.modificar_etiqueta)
self.hbox.pack_start(self.Entrada, True, True)
self.hbox.pack_start(self.Boton, False, False)
self.contenedor.pack_start(self.hbox, False, False)
self.add(self.contenedor)
self.show_all()
def modificar_etiqueta(self, widget):
texto = self.Entrada.get_text()
self.LMensaje.set_markup(''+ texto + '')
def main(self):
gtk.main()
if __name__ == '__main__':
ventana = VentanaXalalinux()
ventana.main()
Este programa se puede descargar de aqui y el logo de aqui. Para correr el programa deben darle desde la terminal
python xalalinux.py
Aqui viene la explicación de cada parte. Al inicio del programa importamos el modulo gtk que es el que nos permite generar todos los objetos para la interfaz gráfica. En Python TODOS los elementos son objetos y siempre se debe pensar en ellos como objetos. Aqui sólo creamos una clase llamada VentanaXalalinux que se hereda de la clase gtk.Window, es decir VentanaXalalinux es una clase gtk.Window (más lo que nosotros le agreguemos), osea una ventana.
class VentanaXalalinux(gtk.Window):
Cuando creamos un objeto de la clase VentanaXalalinux primero se llama al constructor que se encarga de inicializar al objeto. En este caso en el constructor dibujamos toda la ventana. Primero llamamos al constructor de la clase gtk.Window. Esto es para tener acceso a todos los atributos de la clase.
gtk.Window.__init__(self)
Luego definimos algunas propiedades en particular. Primero se conectan eventos generados con las funciones definidas en la clase.El evento delete_event se genera el cerrar la ventana. Cuando se cierra la ventana se ingresa a la funcion self.delete_event que devuelve un valor False, si esta función devuelve un valor True el programa no terminará, esto sirve para poner dialogos de "Seguro que desea salir" dentro de esa funcion. Si devuelve False se genera el evento destroy y se termina la aplicacion.
self.connect('delete_event', self.delete_event)
self.connect('destroy', self.destroy)
Posteriormente cambiamos algunos atributos de la ventana como el titulo, si se trata de la ventana principal el borde y la posición en la pantalla.
self.set_border_width(0)
self.set_title('-:: XalalinuX ::-')
self.set_role('main')
self.set_position(gtk.WIN_POS_CENTER)
Ya con la ventana definida ahora se agregan los controles que tendrá la ventana. Cuando vamos a utilizar varios controles, en GTK es necesario empaquetarlos para distribuirlos en la ventana. Primero agregamos una caja vertical que será el contenedor principal del programa.
self.contenedor = gtk.VBox()
y comenzamos a agregar controles dentro de ese contenedor. En este ejemplo quise cargar una imagen. Se debe tener una imagen con ese nombre en el mismo directorio donde se ejecuta el programa.
self.imagen = gtk.Image()
self.imagen.set_from_file('logo-xalalinux.png')
self.contenedor.pack_start(self.imagen, True, True)
La última línea agrega la imagen al contenedor. Ahora creamos una etiqueta con el texto formateado y la agregamos al contenedor.
self.LMensaje = gtk.Label()
self.LMensaje.set_markup('Etiqueta modificada ')
self.contenedor.pack_start(self.LMensaje, True, True)
Para poner la caja de texto junto con el boton necesitamos otro contenedor pero ahora horizontal. Y ahora agregar la caja de texto y el boton a ese contenedor horizontal. Tambien asociamos el evento clicked a la funcion self.modificar etiqueta para que siempre que se de click al boton se ejecute esta funcion
self.hbox = gtk.HBox()
self.Entrada = gtk.Entry()
self.Boton = gtk.Button(stock=gtk.STOCK_APPLY)
self.Boton.connect('clicked', self.modificar_etiqueta)
self.hbox.pack_start(self.Entrada, True, True)
self.hbox.pack_start(self.Boton, False, False)
self.contenedor.pack_start(self.hbox, False, False)
Por ultimo agregamos el contenedor a la ventana y mostramos todos los widgets.
self.add(self.contenedor) self.show_all()
La funcion modificar_etiqueta sólo toma el valor de la caja de texto y la concatena con el codigo de formato para la etiqueta. Por ultimo aqui es donde creamos y ejecutamos nuestro objeto. La funcion main() se encarga de comenzar con el programa.
if __name__ == '__main__':
ventana = VentanaXalalinux()
ventana.main()
[Offtopic] Oferta de trabajo: Sysadmin
Que tal buenas tardes, en la empresa donde me encuentro laborando actualmente están solicitando gente para los puestos de Sysadmin en Linux/Unix de grado Sr. y Jr. por si existe algún interesado en la comunidad para trabajar en Xalapa, Ver.
Requisitos:
- Amplio dominio y experiencia en sistemas operativos Linux/Unix
- Conocimientos avanzados de red.
- Experiencia administrando servidores Web (apache), Correo, DNS, Proxy, DHCP, Samba, NFS, LDAP.
- Conocimientos de programación en Shell y perl.
- Administración avanzada de usuarios.
- Gestión de la seguridad: IPTables, PF, etc.
- Alto grado de responsabilidad, compromiso e iniciativa.
- Alta Disponibilidad.
Deseable:
- Conocimiento de redes de almacenamiento (SAN)
- Cisco Networking
- Administración de MySQL y PostgreSQL
- Experiencia en distribuciones: Gentoo, Red Hat, Debian, FreeBSD y OpenBSD
- Oracle Networking
- VoIP (Asterisk)
- Windows Server and Networking.
Valientes e interesados enviar su curriculum a jc_estrada@etesa.com.mx con el titulo "Sysadmin: [Perfil]" Jr. o Sr. según el caso.
Smokeping y Qooxdoo
Como buen graficador compulsivo no pude dejar la oportunidad de conocer a Tobi Oetiker y entrar a su platica acerca de RRDTool , tambien hablo un poco de SmokePing lo cual es una herramienta exelente, puedes ver la latencia en tu red, las graficas son totalmente interactivas y tambien maneja un sistema de alertas, no puedo esperar mas para instalarlo. Esta basado en el buen Qooxdoo para los desarrolador web dentro del grupo talves les interese
, Yo no soy buen desarrollador pero leyendo un poco de Qooxdoo y viendo los demos , creo que es una exelente herramienta, si no lo conoces deberias darle una oportunidad.
Saludos!
Desde el Lisa08
Esta ves tuve la oportunidad de asistir al Lisa08 donde me ha dejado un gran sabor de boca
el nivel es alto, y hay acentos de todo el mundo, segun el attendant list solo habemos en
este año dos Mexicanos, y en realidad no conosco al otro.
Solo vine a los Tech Days , y han sido de gran provecho para mi, me he concentrado en
entrar a las conferencias que me interesan(Spam,Monitoring,Audit,Managament),
Aqui he conocido a Tobi Oetiker, Tom Limoncelli, Steve Shipway entre otros sysadmins
enfermillos, El ambiente es realmente totalmente hippi , puedes estar botado en la
alfombra conectado, hay cafe por Starbucks y golosinas proveidas por Google en todo momento
El SO que predomina es MAC, todo mundo tiene una, donde las regalan ?
Y en especial predomina gente de Google y YouTube.
Hay sysadmins de muchas universidades, Berkeley, MIT, Stanford, etc y de Universidades Europeas, tambien de Dreamworks, Macintosh , Oracle, FaceBook, Blogger etc.
todos compartiendo conocimientos en los BOFs ,
Espero postear algo pronto referente a alguno de los temas vistos.
Saludos!

