pygtk-splash.jpg

PyGtk

PyGtk

Que es Pygtk

Pygtk es un wrapper de la librería GTK+ para ser usado por programas hechos en python, cuando se combinan con aplicaciones como PyORBit y gnome-python, puede ser usado para escribir aplicaciones de gnome totalmente usables.

Como Funciona

Lo mas importante para comprender la teoria de pygtk es que saber que pygtk se maneja atravez de señales y llamadas. GTK+ es un toolkit manejado por eventos lo que significa que se quedara en gtk.main() hasta que un evento ocurre y el control se pase a la función adecuada. Este paso de control se hace usando la idea de señales. Cuando un evento ocurre (como un click), una señal apropiada es emitida por el widget que fue presionado. Hay por ejemplo señales que todos los widgets heredan como 'destruir, hay sin embargo señales especificas como las de botones de toogle.

Para que un botón realice una operación, configuramos un manejador de señal para que coja estas señales y por lo tanto llame la función apropiada. Esto se hace usando un metodo como GtkWidget (de la clase GObject):

Donde object es una instancia de GtkWidget que estara emitiendo la señal y el primer argumento 'name' es un string o cadena conteniendo el nombre de la señal que se quiera evaluar. El segundo argumento, func, es la función que se desea llamar cuando se tenga la señal, y el tercer argumento, func_data, son los datos que usted desea pasar a la función. El método devuelve un handler_id que puede ser usado para desconectar o bloquear el handler o manejador.

la función especificada en el segundo argumento se llama la función de llamada o "callback function" y generalmente es de la forma:

Donde el primer argumento sera un puntero hacia el widget que emitió la señal y el segundo (callback_data) un puntero hacia los datos dados como el ultimo argumento del método connect() .

Ejemplos

El Programa mas pequeño (una ventana vacía)

import pygtk
pygtk.require('2.0')
import gtk

class Win:
        def __init__(self):
                self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)  #definición de la ventana
                self.window.set_title("Ventana")               #Titulo de la ventana 
                self.window.show()                             #muestra la ventana
def main():
        gtk.main()

if __name__ == '__main__':
        Ventana = Win()
        main()

Resultado

ventana.png

Hola Mundo

import pygtk
pygtk.require('2.0')
import gtk

class Imprime:
        def saluda(self, widget, data=None):
                print ("cerrado-->>Hola Mundo ;)")

        def cerrar(self, widget, event, data=None):
                gtk.main_quit()
                return gtk.FALSE

        def __init__(self):
                self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)         #Declara ventana
                self.window.set_title("Hola")                         #Titulo ventana
                self.window.set_border_width(50)                      #Tamaño de la ventana
                self.window.connect("delete_event", self.cerrar)      #Conecta a la ventana con el evento cerrar
                #DECLARA BOTON#
                self.button = gtk.Button("close")                     #Declara Boton
                self.button.connect("clicked", self.saluda, None)     #Conecta el boton con la funcion saluda
                self.button.connect("clicked", self.cerrar, None)     #Conecta el boton con la funcion cerrar
                self.window.add(self.button)                          #Agrega el boton a la ventana                      
                #TERMINA DE DECLARAR BOTON#
                self.button.show()                                    #Muestra Boton
                self.window.show()                                    #Muestra Ventana

def main():
        gtk.main()

if __name__ == '__main__':
        ejemplo = Imprime()
        main()

Resultado

hola1.jpg

hola2.jpg

Links

Proyectos hechos en PyGtk

Artículos relacionados

Imagen/borrador-avatar.png

Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia ;)


CategoryPython | CategoryBorrador

PyGtk (last edited 2008-04-20 14:37:59 by localhost)