jueves, 8 de agosto de 2013

Tutorial python Gtk3 Hola Mundo

Hola Mundo


Bueno este es el primer tutorial de programación Python/Gtk3, voy a realizar una serie de estos a ver que tal.

Y bueno,para comenzar este tutorial necesitamos tener una editor configurado para facil programación,recomiendo alguno de estos programas:

sublimetext

kate

gedit+plugins

vim-configurado

nano-configurado

eclipse+pydev

Bueno,también necesitamos el modulo Gtk3 que esta ya en la mayoría de distribuciones de Linux,así que no creo que lo necesiten instalar.

Y saber algo de programación en Python2 o Python3.

Primero que nada en este caso vamos a manipular un modulo,lo que seria como una libreria y la mayor parte del código van a ser clases o funciones del mismo modulo,por lo cual es necesario aprender python solamente antes para manipular bien Gtk3.

Comenzamos:

Primero que nada creamos una carpeta para trabajar limpio,en mi caso voy a usar solo la terminal:

mkdir -p ~/Documentos/python/pygtk && cd ~/Documentos/python/pygtk

Si usan un IDE como eclipse o un editor como gedit,kate pueden hacerlo visualmente a la hora de guardar el programa .py (solo es la forma de hacer las cosas).

Bien,comencemos creamos un archivo con extensión .py,por ejemplo ventana.py.

En mi caso voy a usar vim:

vim ventana.py

Y empezamos a escribir lineas de código.

Antes que nada vamos a definir el hashbang:

#!/usr/bin/env python

Yo voy a usar Python 2.7.

También vamos a usar utf8 para poder usar caracteres especiales,en el texto de las ventanas,etc.

# -*- coding: utf-8 -*-

Ahora vamos a importar el modulo Gtk3:

from gi.repository import Gtk

El modulo se llama Gtk3,si queremos que sea como en la version pasada podriamos hacer algo como esto:

from gi.repository import Gtk as gtk

Pero no es muy buena practica así que trabajaremos con el nombre real.

Vamos a crear una ventana con todo lo necesario para abrirse:

 win = Gtk.Window()  
 win.connect("delete-event",Gtk.main_quit)  
 win.set_title("Hola Mundo!!!")  
 win.show_all()  
 Gtk.main()  

Ahora ejecutamos en una terminal:

python ventana.py

Y se abre la ventana :D.



Ahora lo explico :

win = Gtk.Window() # Inicia un objeto ventana de Gtk

win.connect("delete-event",Gtk.main_quit)

^-Llamamos la funcion connect de la clase ventana,y le pasamos el parámetro ("delete-event") que es la señal que recibe(en este caso cuando le damos clic al boton de cerrar de nuestro window manager) y el parametro ("main_quit" de Gtk) que es lo que ejecuta cuando recibe el primer parametro,en este caso cerrar todo su main.

win.set_title("Hola Mundo!!!") # Llamamos la función que coloca un titulo en la ventana,con el parámetro string("Hola Mundo).

win.show_all() # Llamamos la función show_all que muestra la ventana en la pantalla.

Gtk.main() # Iniciamos el main de Gtk que crea un bucle infinito que mantiene la ventana abierta,hasta recibir la señal de cerrado.

Bien, explicado eso,ahora vamos a añadir un botón que nos salude en la terminal,para eso creamos una variable que sera igual al boton:

button = Gtk.Button(label="Saluda") # Le pasamos un parametro definido(label) que es el nombre que mostrara el boton

Y lo añadimos a la ventana:

win.add(button)

En estos momentos podemos ejecutar el script de nuevo y se ve así,sin embargo no hace nada,ya que no esta definida la función saludar,la definimos y se la pasamos como señal al botón así:

win.button.connect('clicked',saluda) # El primer argumento es la señal(event) y el segundo la respuesta a ejecutar(callback) y hay un tercero.

Y así la función:


def saluda(x): # La x es un argumento que nos pasa la respuesta del boton automáticamente (el tercero[widget]),no lo usaremos en este momento.
    print "Hola mundo!!!"

Así va el script hasta ahora:

 #!/usr/bin/env python  
 # -*- coding: utf-8 -*-  
 from gi.repository import Gtk  
 def saluda(x):  
   print "Hola mundo!!!"  
 win = Gtk.Window() # Inicia un objeto ventana de Gtk  
 win.connect("delete-event",Gtk.main_quit)  
 win.set_title("Hola Mundo!!!")  
 button = Gtk.Button(label="Saluda")  
 button.connect('clicked',saluda)  
 win.add(button)  
 win.show_all()  
 Gtk.main()  

Y funciona :D



Bien antes de continuar déjenme les digo que como estamos programando hasta ahora es programación imperativa al estilo perl,ya que todas las variables,funciones están libres,se puede programar así y yo así lo hago al ser perlero,pero de ahora en adelante vamos a usar programación orientada a objetos,como debe ser :D.

Eso que hicimos en OPP(Programación Orientada a Objetos), se ve así:

 #!/usr/bin/env python  
 # -*- coding: utf-8 -*-  
   
 from gi.repository import Gtk  
   
 class Win(Gtk.Window): # Heredamos de la clase Window
   def __init__(self):  
     Gtk.Window.__init__(self,title="Saluda") # Llamamos las variables y funciones de Window que estén en su __init__
     self.button = Gtk.Button(label="Hola Mundo!!!")  
     self.button.connect('clicked',self.saluda)  
     # Ya no necesitamos poner window.algo ya que como heredamos solo usamos self.  
     self.add(self.button)  
   def saluda(self,x):  
     print "Hola Mundo"  
   
 win = Win()  
   
 win.connect("delete-event",Gtk.main_quit)  
   
 win.show_all()  
 Gtk.main()  

Por ultimo vamos a hacer algo interesante que veremos en la siguiente parte:

 #!/usr/bin/env python  
 # -*- coding: utf-8 -*-  
   
 from gi.repository import Gtk  
   
 class Win(Gtk.Window):  
   def __init__(self):  
     Gtk.Window.__init__(self,title="Saluda")  
     self.button = Gtk.Button(label="Saluda")  
     self.button.connect('clicked',self.saluda)  
     self.box = Gtk.Box(spacing=10)  
     self.label = Gtk.Label()  
     self.label.set_label("Hola Mundo")  
     self.label.set_angle(25)  
     self.label.set_halign(Gtk.Align.END)  
     self.box.pack_start(self.button, True, True, 0)  
     self.box.pack_start(self.label, True, True, 0)  
     self.add(self.box)  
   def saluda(self,x):  
     self.label.set_angle(self.label.get_angle()+6)  
   
 win = Win()  
   
 win.connect("delete-event",Gtk.main_quit)  
   
 win.show_all()  
 Gtk.main()  




No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.