Análisis de Dependencias

Un desglose de las bibliotecas y módulos utilizados en el script.

1. import tkinter as tk

Es la biblioteca estándar de Python para crear interfaces gráficas de usuario (GUI). Al importarla con el alias as tk, simplificamos las llamadas a sus funciones, usando tk como prefijo.

Uso en el script: Es la base de toda la interfaz. Se utiliza para crear la ventana principal (tk.Tk()), así como todos los componentes visuales básicos como etiquetas (tk.Label), campos de texto (tk.Entry) y botones (tk.Button).

2. from tkinter import messagebox, ttk

Se importan submódulos específicos de tkinter para funcionalidades adicionales:

  • messagebox: Proporciona funciones para mostrar cuadros de diálogo estándar (alertas, confirmaciones, errores).
  • ttk (“Themed Tk”): Ofrece una colección de widgets con un aspecto más moderno y nativo del sistema operativo que los widgets básicos de tkinter.

Uso en el script:

  • Se usa messagebox.showwarning() para mostrar advertencias y messagebox.askyesno() para pedir confirmación antes de borrar un contacto.
  • Se utiliza ttk.Treeview para construir la tabla donde se listan los contactos, permitiendo cabeceras claras como "Nombre" y "Teléfono".
3. import sqlite3

Es el módulo estándar de Python que permite trabajar con bases de datos SQLite. SQLite es un motor de base de datos ligero, basado en archivos y que no requiere un servidor externo.

Uso en el script: Se encarga de toda la persistencia de datos. Permite conectar o crear el archivo de base de datos contacts.db, definir la estructura de la tabla de contactos, y ejecutar comandos SQL para insertar, actualizar, borrar y consultar los registros.

4. from typing import List, Tuple

Importa tipos específicos del módulo typing para añadir anotaciones de tipo (type hints) al código. Estas anotaciones no cambian el comportamiento del programa, pero mejoran drásticamente la legibilidad y permiten que herramientas de análisis estático (linters, IDEs) detecten posibles errores.

Uso en el script: Se utiliza para declarar explícitamente el tipo de dato que devuelven algunas funciones. Por ejemplo, la función fetch_all() se anota para indicar que devuelve una List[Tuple[int, str, str]], es decir, una lista de tuplas donde cada tupla contiene un ID (entero), un nombre (cadena) y un teléfono (cadena).