Sección 2 - Una aplicación mínima
La semana anterior en la sección 1 vimos la generador de interfaz gráfica de usuario multiplataforma para Python, en esta ocación veamos la forma de hacer una ventana básica, este pequeño programa solamente contiene un botón para salir:
Crearemos un archivo prototipo001.py y dentro del mismo colocaremos el siguiente código:
(cambienle el autor si quieren...)
Crearemos un archivo prototipo001.py y dentro del mismo colocaremos el siguiente código:
(cambienle el autor si quieren...)
01 #!/user/bin/env python
02 #-------------------------------------------------------------------------------
03 # Name: tkinter ejemplo 001
04 # Purpose: El proposito de este script es demostrar las características
05 # básicas de tkinter y llegar a crear interfaces profesionales,
06 # es en parte inspirado en la guía oficial de tkinter 8.5 y con
07 # conocimientos ampliados que luego fueron incorporados a la guía
08 #
09 # Author: Mauricio José Tobares
10 #
11 # Created: 24/01/2020
12 # Copyright: (c) SplinterStudio 2020
13 # Licence: <lo que? licencia? que es eso?>
14 #-------------------------------------------------------------------------------
15
16 from tkinter import *
17 from tkinter import ttk
18
19 # Crea una clase Python para definir el interfaz de usuario de la aplicación.
20 # Cuando se cree un objeto del tipo 'Prototipo1' se ejecutará automáticamente
21 # el método __init__() que construye y muestra la ventana con todos sus widgets
22 class Prototipo1():
23 def __init__(self):
24 'ventana root o raiz'
25 self.root=Tk()
26 'título de la ventana root'
27 tituloVentanaRoot="Prototipo 001"
28 self.root.title(tituloVentanaRoot)
29 ' se coloca el boton de salida'
30 'esto es así porque se destruye a root que es el padre o raiz.'
31 self.botonSalida=ttk.Button(self.root, text='SALIR', command=self.root.destroy)
32 self.botonSalida.grid(row=0, column=0)
33 'se ejecuta el programa'
34 self.root.mainloop()
35
36 # Define la función main() que es en realidad la que indica
37 # el comienzo del programa. Dentro de ella se crea el objeto
38 # aplicación 'mi_app' basado en la clase 'Prototipo1':
39 def main():
40 mi_app=Prototipo1()
41 return 0
42
43 # Mediante el atributo __name__ tenemos acceso al nombre de un
44 # un módulo. Python utiliza este atributo cuando se ejecuta
45 # un programa para conocer si el módulo es ejecutado de forma
46 # independiente (en ese caso __name__ = '__main__') o es
47 # importado:
48 if __name__ == '__main__':
49 main()
ACLARACIÓN: yo se que se ve feo el
poner el número de línea, pero este manual va de principiante que no sabe
absolutamente nada a contenidos avanzados, por tanto al inicio será muy
conveniente colocar el número de la línea!
nuestra pequeña aplicación se ve así:
Por ahora se ve bastante fea... la típica
interfaz marciana tan cuestionada por muchos...
Como se puede apreciar hay unas cuantas
diferencias entre Python 2.7 y Pythn 3.8.1, principalmente la forma en que se
trabajan (con clases), el documento original NO FUNCIONARÁ en las versiones de
python 3.x (este ejemplo fue testeado en Python 3.8.1), a lo largo de todo este artículo se trabajaremos solo con Python 3.8.1, seguramente funcionará de
igual modo en las versiones anteriores de Python 3.x.
Agregando unos extras
Para comenzar vamos a colocar un logo al proyecto (un pequeño .ico de
128x128 que encontré en una web de iconos gratuitos), lo que se debe hacer es (y
como es lógico) pensar a futuro, para ello vamos a crear una carpera llamada “modulos”
en la carpeta donde se tiene el script prototipo001.py, dentro de esta carpeta
colocaremos una carpeta llamada “img”, y dentro de esta carpeta pondremos
nuestro logo.ico. Una ruta posible hacia nuestro pequeño logo sería
./modulos/img/logo.ico
Ahora bien, vamos a los códigos, en primer lugar colocaremos a continuación
de la línea n° 28 el siguiente código:
28 self.root.title(tituloVentanaRoot)
# dejo este renglon solo para referencia
29 'con
esto colocamos el logo personalizado de la ventana root'
30 try:
31 'el icono DEBE ser .ico de lo contrario no
funcionara'
32 self.root.iconbitmap('./modulos/img/logo.ico')
# ATENCION: Cuidado con la ruta del ícono!!
33 except
TclError:
34 'imprime este mensaje si el icono no se
encuentra o no pudo ser cargado'
35 print("ERROR: El icono de la ventana
no pudo ser cargado")
36
pass
El resultado se verá así:
Pueden poner cualquier logo... yo puse ese
porque es lo que encontré!!
Ahora le agrego una forma de maximizar la
ventana al tamaño que tenga el usuario, aporte que se agradece pues la mayoría
de los programas comienzan maximizados (o al menos esa debería ser la regla
general)
NOTA IMPORTANTE:
Es siempre recomendable que a la ventana padre se la llame “root”, ya que la gran mayoría de los programadores así le llama a la raiz de sus aplicaciones, en nuestro caso la ventana padre.
Es siempre recomendable que a la ventana padre se la llame “root”, ya que la gran mayoría de los programadores así le llama a la raiz de sus aplicaciones, en nuestro caso la ventana padre.
Siguiendo el mismo procedimiento de agregar código colocaremos a partir de
la línea n° 25 lo siguiente:
25
self.root=Tk()
26
'lo siguiente hace que la ventana root inicie maximizada'
27
toplevel=self.root.winfo_toplevel()
28 toplevel.wm_state('zoomed')
No voy a profundizar mucho en detalles porque seguidamente se van a explicar algunos conceptos.
Hasta el próximo jueves, salud y saludos!
Mauricio José Tobares
No hay comentarios:
Publicar un comentario