Empezamos una nueva etapa en el proyecto del curso Máster en Python. La creación de la interfaz gráfica.
Creación del paquete de la interfaz gráfica
En primer lugar, crea un paquete de Python. Constará del __init__.py y del archivo que llevará la clase o clases de la interfaz gráfica.
Empecemos entonces a crear en el archivo «interfaz_grafica.py».
También, crea la carpeta «imagenes», en la cual, iremos añadiendo las imágenes de la interfaz gráfica.
Componentes de la interfaz gráfica de Tkinter
La interfaz gráfica, contará con los siguientes componentes:
- Ventana principal con un login para usuarios autorizados a usar la app.
- Obtendrá una ventana secundaria con botones con todas las opciones del programa.
- Consulta SQL.
- Reporte de las bases de datos del servidor.
- Eliminar una base de datos del servidor.
- Crear una base de datos en el servidor.
- Crear copias de seguridad.
- Crear una tabla.
- Eliminar una tabla.
- Mostrar tablas.
- Mostrar columnas de una tabla.
- Insertar un registro en una tabla.
- Eliminar un registro en una tabla.
- Vaciar una tabla.
- Actualizar un registro en una tabla.
- Al pulsar en un botón con una de estas opciones, desplegaremos una ventana nueva para cada opción.
- También, añadiremos un menú de opciones superior con menús y submenús desplegables.
El programa, en un principio, será algo simple. El objetivo es que consigas hacer funcionar todos los métodos de la lógica que hemos creado en los capítulos anteriores con esta interfaz gráfica.
Después de esto, ya habrá tiempo de mejorar seguridad, la presentación, mejorar sus funciones, etc.
Esto podría llegar a ser un módulo importante en un programa de gestión empresarial, pero no será tan sofisticado, ya que eso nos llevaría bastantes más días de trabajo. Hay que seguir progresando con temas nuevos.
Para empezar, voy a crear el login. Para ello, aprovecharé gran parte del código de los ejercicios del capítulo 14 del curso.
Es importante indicar, que puedes hacer la interfaz a tu gusto, no necesariamente debes seguir literalmente todo lo que hago. Sin embargo, puede que seguir todo el código que hago, exactamente igual, te dé algo de facilidad a la hora de subsanar errores.
Ventana principal de login con Tkinter
La ventana principal de login, quiero que tenga los siguientes componentes:
- Una ventana.
- Una imagen en la ventana.
- Un icono y un título en la barra de título.
- Dos etiquetas (Label).
- Dos campos de texto (Entry).
- Un botón que envíe los datos y los compruebe.
Carpeta para imágenes
Puesto que va a haber imágenes, tienes que crear una carpeta donde las vamos a ir incluyendo.
El logo (.png) i el icono (.ico) te los dejo por aquí, por si quieres usar el mismo que yo:
Código de la ventana principal
Lo primero, es lo primero. En el archivo interfaz_grafica.py, voy a importar tkinter, os y PIL.
Con esto, ya tendremos resuelto el problema de las imágenes, las rutas y la biblioteca de interfaz gráfica.
Recuerda que PIL se debe instalar, ya que no forma parte de Python. Expliqué esto en el capítulo 14 del curso.
#Importaciones import tkinter as tk import os from PIL import ImageTk, Image
Lo siguiente, es obtener las rutas de las carpetas.
# ---> Rutas #Carpeta principal carpeta_principal = os.path.dirname(__file__) #.\proyecto-bd\bd\interfaz carpeta_imagenes = os.path.join(carpeta_principal, "imagenes") #.\proyecto-bd\bd\interfaz\imagenes
Clase para la ventana principal
De momento, esta clase, tendrá un método __init__, el cual le dará el estado inicial. No voy a volver a explicar todas estas cosas de Tkinter, puesto que ya las hemos dado, solo que ahora, están dentro de una clase. Por supuesto, siempre que tengas dudas, déjame un comentario.
class Login: def __init__(self): # Creación de la ventana principal self.root = tk.Tk() self.root.title("Programación Fácil - Proyecto de bases de datos") self.root.iconbitmap(os.path.join(carpeta_imagenes, "logo.ico")) self.root.geometry("450x450") # Contenido de la ventana principal # Logo logo = ImageTk.PhotoImage(Image.open(os.path.join(carpeta_imagenes, "logo.png"))) tk.Label(self.root, image=logo).pack() # Campos de texto # Usuario tk.Label(self.root, text="Usuario").pack() self.usuario = tk.Entry(self.root) self.usuario.insert(0, "Ej:Laura") self.usuario.bind("<Button-1>", lambda e: self.usuario.delete(0, tk.END)) self.usuario.pack() # Contraseña tk.Label(self.root, text="Contraseña").pack() self.contrasena = tk.Entry(self.root) self.contrasena.insert(0, "*******") self.contrasena.bind("<Button-1>", lambda e: self.contrasena.delete(0, tk.END)) self.contrasena.pack() # Botón de envío tk.Button(self.root, text="Entrar").pack() # Bucle de ejecución self.root.mainloop()
Nos quedará instanciar el objeto. Quiero que todo se maneje desde el archivo app.py, por lo tanto, debemos importar el nuevo módulo en dicho archivo.
import interfaz.interfaz_grafica as gui
Luego instanciamos el objeto. La línea 9, es un objeto de tipo Login. Este objeto lleva la ventana entera en una sola línea. De modo, que podemos crear objetos de este tipo donde queramos.
#Importaciones import bd.base_datos as sqlbd import bd.tablas as tbl import interfaz.interfaz_grafica as gui #Objeto de tipo BaseDatos base_datos = sqlbd.BaseDatos(**sqlbd.acceso_bd) ventana_login = gui.Login()
Listo. Al ejecutar app.py, se despliega todo el código de la clase Login.
En el siguiente capítulo, verás como añadir una comprobación al introducir el nombre de usuario y la contraseña. Será una verificación mediante el nombre de usuario y contraseña en el servidor MySQL.
Te dejo como ejercicio, que lo intentes hacer antes del siguiente capítulo.
No te pierdas nada del curso Máster en Python.
genioo