miércoles, 10 de julio de 2013

PyGTK 3: mini tutorial de GUI con Python + GTK+3

Vamos a hacer un pequeño programa con PyGTK 3.0 que también funciona para PyGTK 3.4. Esta pequeña GUI les enseñara como dividir un programa en dos a mas archivos.
Ustedes pueden visitar el tutorial de Sebastian Pölsterl sobre el nuevo PyGTK 3, aquí esta el nuevo tutorial, les dejo el link :
http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html
Este es el blog de Sebastian .
http://k-d-w.org/node/88
Una critica a este tutorial de Sebastian es que no enseña a dividir un programa en partes o en varios archivos, hubiera sido bueno que mostrara un ejemplo de como hacerlo con PyGTK 3.
Todos los programas grandes y complejos se dividen en muchos archivos e incluso los archivos se colocan en otros directorios, es decir se ubican en diferentes carpetas.
Comencemos con el pequeño ejemplo:
Aquí les dejo el código del escrito en un solo archivo llamado gui.py. Abrimos el editor de texto Gedit o el editor que mas usemos, copiamos el codigo de abajo y lo guardamos como gui.py
from gi.repository import Gtk

class gui():

def on_open_clicked(self, button):
print "\"Open\" button was clicked"

def on_close_clicked(self, button):
print "Closing application"
Gtk.main_quit()

def __init__(self):
self.window = Gtk.Window()
self.window.connect('delete-event', Gtk.main_quit)

self.box = Gtk.Box()
self.window.add(self.box)

self.button = Gtk.Button(label='Open')
self.button.connect("clicked", self.on_open_clicked)

self.box.pack_start(self.button, True, True, 0)

self.button = Gtk.Button(label='Cerrar')
self.button.connect("clicked", self.on_close_clicked)

self.box.pack_start(self.button, True, True, 0)

self.window.show_all()
Gtk.main()
if __name__ == '__main__':
gui = gui()
http://blog.desdelinux.net/wp-content/uploads/2013/07/fronton--600x480.png
def on_open_clicked(self, button):
print "\"Open\" button was clicked"
Es una función que se activa en el terminal cuando hacemos clic en el botón open. La señal para activarla es:
self.button.connect("clicked", self.on_open_clicked)

def on_close_clicked(self, button):
print "Closing application"
Gtk.main_quit()
es una función que se activa cuando hacemos clix en el boton cerrar .
cierra el programa que ejecutamos .
la señal para activarla es
self.button.connect("clicked", self.on_close_clicked)
from gi.repository import Gtk ### invocamos a las librerías de PyGTK ###
class gui(): ### definición de clase llamada gui es la clase principal ###
Declaración de Widgets: un widgets es un programa predeterminado por las librerías de interfaz gráfica que usamos. Por ejemplo un widgets es un botón, una ventana, una caja, etc. Estos son los widgets que declaramos en nuestra programa .
self.window = Gtk.Window() ### ventana ###

self.box = Gtk.Box() ### caja ####

self.button = Gtk.Button(label='Open') #### boton open ####

self.button = Gtk.Button(label='Cerrar') #### boton cerrar ####

self.window.add(self.box) #### la caja esta contenida en la ventana llamada window ####

self.box.pack_start(self.button, True, True, 0) ##### el boton esta contenido en la caja llamada box ###
self.window.show_all() ### mostramos toda la ventana ###

gui = gui() ### creo un objeto gui ####
Colocamos nuestro programa en una carpeta llamada simple en nuestro caso en el escritorio
fert
Abrimos la carpeta con el terminal , en mi caso uso Nemo de Linux Mint 14 .
clos
Para compilar colocamos en el terminal python gui.py
ver la imagen .
terminal
Ahora podemos ver nuestro pequeño programa o widget nuevo creado con las librerias PyGTK 3
Se trata de una simple ventana con dos botones .

Untitled

Ahora dividimos el programa en tres partes a continuación les dejo el código de los tres archivos .
Primer archivo gui.py
from gi.repository import Gtk

from destroy import destroy
from io import io

class gui(destroy ,io ):

def __init__(self):
self.window = Gtk.Window()
self.window.connect('delete-event', Gtk.main_quit)

self.box = Gtk.Box()
self.window.add(self.box)

self.button = Gtk.Button(label='Open')
self.button.connect("clicked", self.on_open_clicked)

self.box.pack_start(self.button, True, True, 0)

self.button = Gtk.Button(label='Cerrar')
self.button.connect("clicked", self.on_close_clicked)

self.box.pack_start(self.button, True, True, 0)

self.window.show_all()
Gtk.main()
if __name__ == '__main__':
gui = gui()
Segundo archivo io.py
class io:

def on_open_clicked(self, button):
print "\"Open\" button was clicked"
Tercer archivo destroy.py
from gi.repository import Gtk

class destroy:
def on_close_clicked(self, button):
print "Closing application"
Gtk.main_quit()
Colocamos los tres archivo en una misma carpeta en nuestro caso , la carpeta se llama simple dividido .
simple
Para compilar los tres archivos . Abrimos la carpeta con el terminal y simplemente colocamos de nuevo en el terminal
python gui.py
Modificaciones realizadas al codigo gui.py
from destroy import destroy ### sentencia para importar nuestro archivo destroy.py ###
from io import io ### sentencia para importar nuestro archivo io.py ###

class gui(destroy ,io ): #### ala clase principal le añadimos las subclases destroy e io ####
Pueden observar que la sentencia
def on_open_clicked(self, button):
print "\"Open\" button was clicked"
no esta en gui.py, se encuentra en el archivo io.py
La sentencia
def on_close_clicked(self, button):
print “Closing application”
Gtk.main_quit()
se encuentra en el archivo destroy.py
Así podemos dividir un programa en muchos archivos ubicados en diferentes directorios a la vez.
Por otra parte Python es un pilar del software libre, y esta adaptado para funcionar con GTK 3.6 /3.8 su denominación es PyGTK. La adaptación de Python para KDE se denomina PyQT.
Python esta adaptado para Mac OS y WINDOWS .
Espero que les haya sido útil este mini tutorial de PyGTK3. Pueden hacer todas las criticas constructivas que quieran.
También se algo de Gtk 3.4 /3.6 y Vala GTK 3.4/3.6.

Por ultimo disculpen los usuarios de KDE por no realizar un mini tutorial para KDE .

Invitación a conectarse en LinkedIn

 
LinkedIn
 
 
 
Jorge Arevalos
 
De Jorge Arevalos
 
Docente en UTCD
Paraguay
 
 
 
 
 
 
 

Me gustaría añadirte a mi red profesional en LinkedIn.

-Jorge

 
 
 
 
 
 
 
Estás recibiendo invitaciones a conectar. Date de baja
© 2012, LinkedIn Corporation. 2029 Stierlin Ct., Mountain View, CA 94043 EE.UU.