sábado, 27 de noviembre de 2010

Primeros pasos con pygtk

Pues bien, hoy estuve picando código en pygtk, buscando respuestas en google, cuestionando a un experto conocido mío y por fin logré mi cometido:
 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 pygtk
pygtk.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ón
def 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ón
mwindow = 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 botones
box1 = gtk.HBox(True, 0)
# añado la caja a la ventana
mwindow.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 caso
boton1 = gtk.Button("Sin Cerrar")
boton1.connect("clicked", self.ventana_nueva, mwindow)
boton1.show()
#empaquetado del botón en la caja principal
box1.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 caso
boton2 = 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 principal
box1.pack_start(boton2, True, True, 0)
# mostrar la caja principal
box1.show()
# mostrar la ventana principal
mwindow.show()
# esta función destruye la ventana secundaria al darle click 
# en el botón "OK", recibe "window" como argumento para saber
# qué ventana cerrar
def 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ón
window = 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 botones
box1 = gtk.HBox(True, 0)
# añado la caja a la ventana
window.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 secundaria
boton1 = 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 principal
box1.pack_start(boton1, True, True, 0)
# mostrar la caja principal
box1.show()
# mostrar la ventana secundaria
window.show()
def __init__(self):
# llamo a la función para abrir la ventana principal
self.abrir_ventana()

def main(self):
# inicio el ciclo principal de gtk
gtk.main()
if __name__ == "__main__":
base = Base()
base.main()

sábado, 20 de noviembre de 2010

25 aniversario de Windows



Microsoft Windows 1.0 fue el primer intento de Microsoft de implementar un entorno operativo gráfico multitarea en la plataforma PC.

Este producto se remonta a 1981, cuando Microsoft inició un proyecto que se llamó Interface Manager. Fue presentado al público el 10 de Noviembre de 1983, de manera oficial y renombrado como Microsoft Windows. En la caja azul se anunciaba un PC con la interfaz gráfica de Windows, con varias ventanas pegadas unas a otras. La estrategia de ventas de Microsoft era proporcionar un nuevo ambiente de desarrollo y un nuevo entorno de software en el que se utilizan imágenes de mapa de bits y un ratón, liberando así al usuario del "método MS-DOS de escribir comandos en el indicador del disco C (C:\)".



Windows 1.01 (fue la primera versión lanzada, ya que la 1.00 tuvo un fallo importante y fue rápidamente retirada) trajo incluído un administrador de archivos, calculadora, calendario, libreta de apuntes y emulador de terminal.

Windows 1.01 se distribuía en 5 diskettes de 5 1/4" de 360 Kb.
Tenía soporte para algunos dispositivos apuntadores, para videos CGA, Tarjetas Hércules y EGA, y soporte para alrededor de 19 modelos de impresoras.
Aunque era "mejor" que MS-DOS, ya que era más simple y ofrecía menos complicaciones, Windows 1.01 no era de mucha utilidad. No había íconos para los ejecutables o grupos de programa, no tenía soporte multitarea, etc.

Windows 1.02 estuvo disponible el 20 de Noviembre de 1985 en forma de actualización. De nuevo, Microsoft no especificó una versión, pero podía ser considerada la 1.02. Esta versión superó la barrera de los 64Kb.

Windows 1.03 fue lanzado el 29 de agosto de 1986. Era muy similar al 1.02, además se distribuía en 6 diskettes de 5 1/4" de 360 Kb. El "sistema entero" instalado superaba ligeramente los 2MB. Esta versión soportaba diferentes distribuciones de teclado(de 26 países), una variedad de dispositivos de entrada, CGA/EGA y 25 modelos de impresoras (incluyendo soporte para múltiples impresoras). Las aplicaciones eran más o menos iguales que en la 1.02, con alguna que otra mejora. También corría bajo el MS-DOS 3.2.

El precio sugerido de venta era de $99.00 dólares! y para cerrar con broche de oro, el comercial promocional con el mismísimo Steve Ballmer!



Fuente original: Wikipedia