Clase para funciones del programa con TK y CTK

curso de Python

El objetivo de este capítulo, es crear una clase para funciones del programa con Tk y CTK (Tkinter y CustomTkinter), que tenga 13 métodos. Por el momento, cada uno de estos métodos, solo abrirá una ventana Toplevel, después, a partir del siguiente capítulo, iremos añadiendo el código de cada ventana a cada método.


Clase FuncionesPrograma

Por supuesto, en lugar de hacer una clase con 13 métodos, podrías hacer una clase para cada ventana.

Esto depende en gran parte de la complejidad de cada ventana. Si quieres hacer tareas sencillas, basta con un método en una clase por ventana. En cambio, si quieres hacer grandes cosas con cada ventana, es mejor que tenga cada una su clase.

Yo lo haré en métodos, puesto que las acciones de estas ventanas no serán superelaboradas.

Como ya avisé, no haré el código de todas las ventanas para no alargar mucho más el proyecto y poder continuar con más cosas en el curso.

Sin embargo, podéis ir practicando añadiendo los métodos que no haga, para eso os estoy enseñando, para que empecéis a programar de forma autónoma.

Código de la clase FuncionesPrograma

Esta clase, la escribiremos después de la clase Login() del archivo de la interfaz gráfica del proyecto.

Cada método lleva su creación de ventana secundaria (TopLevel) y su propio título. Como he dicho, iremos completando cada una con su código específico para las necesidades de cada una.

Finalmente, instanciamos un objeto de esta clase.

Esta clase no será una ventana, sino que creará objetos con las funcionalidades para la ventana.

Código Tkinter

Aquí está el código para quienes hacéis el proyecto con Tkinter:

class FuncionesPrograma:
    def ventana_consultas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana de consultas SQL")
        
    def ventana_mostrar_bases_datos(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para mostrar las bases de datos del servidor.")
        
    def ventana_eliminar_bases_datos(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para eliminar bases de datos")
        
    def ventana_crear_bases_datos(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para crear bases de datos")
        
    def ventana_crear_respaldos(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para crear respaldos")
        
    def ventana_crear_tablas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para crear tablas")
    
    def ventana_eliminar_tablas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para eliminar tablas")
        
    def ventana_mostrar_tablas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para mostrar tablas")
        
    def ventana_mostrar_columnas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para mostrar columnas de una tabla")
        
    def ventana_insertar_registros(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para insertar registros")
        
    def ventana_eliminar_registros(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para eliminar registros")
        
    def ventana_vaciar_tablas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para vaciar tablas")
    
    def ventana_actualizar_tablas(self):
        ventana = tk.Toplevel()
        ventana.title("Ventana para actualizar tablas")
        
objeto_funciones = FuncionesPrograma()

Código CustomTkinter

Aquí está el código para quienes hacéis el proyecto con CustomTkinter:

class FuncionesPrograma:
    def ventana_consultas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana de consultas SQL")
        
    def ventana_mostrar_bases_datos(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para mostrar las bases de datos del servidor.")
        
    def ventana_eliminar_bases_datos(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para eliminar bases de datos")
        
    def ventana_crear_bases_datos(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para crear bases de datos")
        
    def ventana_crear_respaldos(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para crear respaldos")
        
    def ventana_crear_tablas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para crear tablas")
    
    def ventana_eliminar_tablas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para eliminar tablas")
        
    def ventana_mostrar_tablas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para mostrar tablas")
        
    def ventana_mostrar_columnas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para mostrar columnas de una tabla")
        
    def ventana_insertar_registros(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para insertar registros")
        
    def ventana_eliminar_registros(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para eliminar registros")
        
    def ventana_vaciar_tablas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para vaciar tablas")
    
    def ventana_actualizar_tablas(self):
        ventana = ctk.CTkToplevel()
        ventana.title("Ventana para actualizar tablas")
        
objeto_funciones = FuncionesPrograma()

La clase VentanaOpciones

Crearemos, debajo de la clase anterior, una clase llamada VentanaOpciones(). En ella, pondremos un diccionario para almacenar los datos de los botones. En el orden en que queremos que aparezcan.

Como clave, un string con el «text» del botón (texto que quieres que salga en el botón) y en el valor, una llamada a su correspondiente método del objeto instanciado de la ventana FuncionesPrograma().

Sencillamente, cuando estemos pulsando un botón, generaremos una nueva ventana gracias a FuncionesPrograma().

En el __init__ Se le da el aspecto inicial a la ventana, el cuál, expliqué detenidamente en el capítulo anterior.

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5555912498300875" 
     crossorigin="anonymous"></script> 
<ins class="adsbygoogle" 
     style="display:block" 
     data-ad-format="autorelaxed" 
     data-ad-client="ca-pub-5555912498300875" 
     data-ad-slot="4003478168"></ins> 
<script> 
     (adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
<br>class VentanaOpciones:
    # Diccionario para los botones
    botones = {'Consulta SQL': objeto_funciones.ventana_consultas, 
               'Mostrar Bases de Datos': objeto_funciones.ventana_mostrar_bases_datos,
               'Eliminar Bases de Datos': objeto_funciones.ventana_eliminar_bases_datos,
               'Crear Bases de Datos': objeto_funciones.ventana_crear_bases_datos, 
               'Crear Respaldos': objeto_funciones.ventana_crear_respaldos,
               'Crear Tablas': objeto_funciones.ventana_crear_tablas,
               'Eliminar Tablas': objeto_funciones.ventana_eliminar_tablas,
               'Mostrar Tablas': objeto_funciones.ventana_mostrar_tablas,
               'Mostrar Columnas': objeto_funciones.ventana_mostrar_columnas,
               'Insertar Registros': objeto_funciones.ventana_insertar_registros,
               'Eliminar Registros': objeto_funciones.ventana_eliminar_registros,
               'Vaciar Tablas': objeto_funciones.ventana_vaciar_tablas,
               'Actualizar Registros': objeto_funciones.ventana_actualizar_tablas
               }
    
    def __init__(self):
        self.root = ctk.CTk()
        self.root.title("Opciones para trabajar con bases de datos.")

        #Contador para la posición de los botones
        contador = 0

        # Crea los botones y establece su texto
        for texto_boton in self.botones:
            button = ctk.CTkButton(
                master=self.root,
                text=texto_boton,
                height=25,
                width=200,
                command=self.botones[texto_boton]
            )
            button.grid(row=contador//3, column=contador%3, padx=5, pady=5)
        
            # Incrementa el contador
            contador += 1

Con esto, ya tenemos nuestro programa capaz de ejecutar tantas ventanas como necesitemos.

No te pierdas nada del curso de Máster en Python.


Clase para funciones del programa con TK y CTK

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba