martes, 25 de julio de 2017

Thonny, el nuevo IDE para Python, disponible en la nueva versión de Raspbian

Tal y como ya publiqué en hace unos días, la nueva actualización de Raspbian llevaba la un nuevo IDE para programar con Python llamado Thonny, aquí tenéis el link (donde explica como instalarlo).
Hasta ahora yo siempre usaba el IDLE que python lleva por defecto, pero ayer probé este nuevo programa y creo que es muy recomendable, tanto para principiantes como para expertos, ya que añade varias herramientas que me han gustado mucho. Aquí tenéis un pequeño manual.

1. Ejecutar Thonny en Raspbian

Una vez actualizado Raspbian y después de instalar Thonny (podéis ver el link anterior si no sabéis como hacerlo), en el menú encontraréis una nueva opción en 

Inicio-Programación-Thonny Python IDE


al hacer click en el nuevo icono aparecerá la pantalla de thonny, algo parecido a lo siguiente

2. Entorno de trabajo de Thonny



El programa dispone de una estructura simple, con un menú en la parte superior, en File econtrareis las tradicionales opciones para crear, abrir y guardar archivos, en Edit las opciones de hacer, deshacer, cortar, copiar..., en View las opciones para activar y desactivar los diferentes paneles (luego entraremos en ello) y algunas otras opciones, en Run tenemos las opciones para ejecutar el código (luego lo veremos con más detalle), en Tools diferentes herramientas y opciones de configuración, y una opción de ayuda (Help).


Debajo del menú disponemos de los botones que ejecutan las opciones más usuales del programa, y son más que suficientes. Por orden son: nuevo, abrir, guardar, ejecutar, debugar, debugar paso siguente, debugar entrar siguente paso, debugar saltar paso, y finalmente parar la ejecución. (luego lo vemos con detalle)


Como podéis ver en el espacio de  trabajo tenemos una pantalla con dos áreas separadas, la parte superior la usaremos para introducir el código de nuestros programas, mientras que la parte inferior es la pantalla de shell, que funciona exactamente igual que la pantalla del IDLE de python, en la que también podemos ejecutar código de python directamente. Vamos a ver como utilizar este nuevo entorno.

3. Nuestro primer programa con Thonny

Una vez abierto el programa haced click en el botón nuevo (primer botón), o haced click en File - New, o preisonad Ctrl+N, en la parte superior de la pantalla de trabajo aparecerá una nueva pestaña con el título <untitled>. Tal y como muestro a continuación



ahora podemos guardarlo haciendo click en el botón guardar (tercer botón), o haciendo click en File - Save, o con Ctrl+S. Especificad un nombre y ubicación para el archivo (en mi caso lo llamaré ejercicio_01). El nombre de la pestaña cambiará tal y como muestra la imagen



ahora vamos a introducir este código en la parte superior de la pantalla.

print ("Mi primer programa con thonny")

si ejecutáis el código con el botón Run (el cuarto botón) o hacéis click en Run - Run current script o presionáis F5, el código de ejecuta y en la parte inferior (el Shell) veréis el resultado, tal y como se ve ene esta imagen



podríais escribir directamente el código en el shell (parte inferior) y al hacer Intro, el código también se ejecutaría (tal y como he explicado antes).

4. Visualizar las variables con Thonny

Abrid un nuevo archivo, y guardadlo como ejercicio_02 (se añadirá una nueva pestaña en la parte superior), introducid el siguiente código

n=1
while n<11:
    print ("repeticion " + str(n))
    n=n+1

guardad de nuevo el archivo y en el menú haced click en View - Variables, esto abrirá una ventana en el lateral derecho en el que se muestran las variables de nuestro código, ejecutad el código, veréis algo parecido a lo siguiente



fijaos que una vez ejecutado el código la variable n muestra el valor 11. Tranquilos que ahora veremos como depurarlo paso a paso.


5. Depuración paso a paso con Thonny


Ahora vamos a ver como depurar el código del ejercicio_02, paso a paso. Haced click en el botón Debug current script (el quinto botón). Veréis como ahora el fondo del panel superior se pone de color amarillo y la primera línea del código aparece resaltada con un recuadro amarillo más intenso. Por otro lado lo botones Step over, Step into, Step out y Interrupt/Reset del menú se activan, la pantalla tendrá este aspecto



ahora haced click en el botón Step over (el sexto botón), veréis como saltamos a la siguiente instrucción, a la vez que en el lado derecho el apartado Variables nos muestra que n tiene el valor 1. Si volvemos a hacer click en el botón Step over, se ejecutará todo el código de la siguiente instrucción (while), finalizará la ejecución y el valor de n será 11.

Sí ya sé, tal vez nos interese pasar paso a paso por la instrucción while. Bien ejecutad de nuevo el código con el botón Debug current script, haced click una vez en el botón Step over, ahora para ejecutar paso a paso el código de la instrucción while, haced click en el botón Step into (séptimo botón). Veréis como ahora se analiza la condición n<11, volved ha hacer click en el mismo botón sucesivamente y pasaremos una a una por todas las intrucciones, podréis ver como la variable n va cambiando de valor y como se muestra en el Shell el texto. El botón Step out como ya habréis adivinado sirve para salir del interior de una instrucción como el while y continuar en el siguiente paso. El funcionamiento es sencillo, podéis practicar la depuración paso a paso con los botones con este sencillo código. Y para acabar la ejecución podéis pararla con el último botón. Sin embargo para ser más rápidos en lugar de  usar botones tenéis la opción de usar la tecla F6 para Step over, F7 para Step into y F8 para Step out, seguro que váis más rápidos

6. Recurrencia en el editor Thonny

Vamos a ver si lo explico de forma sencilla, Thonny en el modo de depuración paso a paso nos permite visualizar las funciones, a las que podemos llamar varias veces. Abrid un nuevo archivo guardadlo como ejercicio_03 y poned este código

def print_hello(name):
    print ("Hello " + name + "!")

while True:
    i_name=input("Introduzca su nombre: ")

    print_hello(i_name)

con este código he definido una función que recibe la variable nombre y muestra en el Shell un texto de bienvenida. Luego he creado un bucle infinito (while) que nos pide que introduzcamos un nombre y ejecuta la función anterior. Una vez copiado el código vamos a depurarlo paso a paso. Una vez estéis en la instrucción while usad el botón Step into o F7, cuando en el Shell os pida el nombre introducid un nombre (el vuestro por ejemplo)  y haced intro en el teclado, y continuad con la depuración paso a paso con Step into o F7, una vez esteis en la instrucción print_hello(i_name) al hacer click en Step into pasará por los diferentes items de la línea y luego se abrirá una nueva ventana (fijaos en la barra azul en la que pone el nombre de la función print_hello), podéis mover esta ventana hacia un lado con el ratón haciendo click y arrastrando en la barra azul, esta ventana contiene una parte superior con el código de la función y una parte inferior con las variables de esta función y su valor (vuestro nombre), ahora podéis ir paso a paso y ver que hace esta función.



una vez ejecutado todo el código de la función veréis en el shell el texto de bienvenida, y una vez hemos pasado por todas líneas de la función la ventana se cierra. Podéis introducir otro nombre y ejecutar paso a paso las instrucciones, y se volverá a abrir la ventana, si no queréis que se abra saltad el paso con Step over (practicad un poco que vale la pena)

6. Información de objetos con Thonny

Thonny permite visualizar más información, para verlo bien abrid un nuevo archivo y guardadlo como ejercicio_04, introducid el siguiente código

class Cliente():
    def __init__(self,n,t):
        self.nombre=n
        self.telefono=t
    def get_nombre(self):
        return self.nombre
    def get_telefono(self):
        return self.telefono

clientes=[]

clientes.append(Cliente("Alex","123 456 789"))
clientes.append(Cliente("Ana","456 123 789"))
clientes.append(Cliente("Pancho","789 456 123"))

for cliente in clientes:
    nombre=cliente.get_nombre()
    telefono=cliente.get_telefono()

    print(nombre + " - " + telefono)

el código es más largo pero fácil, he definido una clase (Cliente) que recibe el nombre y el teléfono y contiene dos funciones para devolver el nombre y teléfono respectivamente.
Luego he creado una lista vacía (clientes) y la he rellenado con tres items (con sus respectivos nombres y teléfonos). Para acabar he creado un bucle for que recorre lo lista y usando la clase muestra el nombre y teléfono en el shell.
Antes de ejecutar en el menú haced click en View - Heap y luego otra vez en View - Object inspector, esto abre otras dos ventanas laterales que muestran la información de pila y los objetos del código que ejecutamos. Ahora ejecutad paso a paso, veréis como en la pila se acumula la información. si hacéis click en una línea de la pila la pestaña del inspector de objetos os mostrará los atributos, métodos, etc. 



Thonny incorpora algunas opciones más como modificar la fuente  y el tamaño de la letra, etc, etc... pero esto os lo dejo para que lo investiguéis vosotros (lo encontraréis en Tools).

Bueno pues ahora tenéis que decidir si os quedáis con Thonny u otro editor, yo creo que me quedo con este, me ha gustado!