"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo compartir datos variables entre diferentes páginas en una aplicación GUI?

¿Cómo compartir datos variables entre diferentes páginas en una aplicación GUI?

Publicado el 2024-11-06
Navegar:781

How to Share Variable Data Between Different Pages in a GUI Application?

Cómo obtener datos variables de una clase

En el contexto de la programación GUI, es común tener varias páginas dentro de una sola ventana de la aplicación. Cada página puede contener varios widgets, como campos de entrada, botones o etiquetas. Al interactuar con estos widgets, el usuario proporciona información o toma decisiones que deben compartirse en diferentes páginas. Esto plantea la cuestión de cómo acceder a datos variables de una clase a otra, especialmente cuando esas clases representan páginas diferentes.

Aprovechando su controlador

Un enfoque eficaz implica aprovechar el concepto de una clase de controlador . En el fragmento de código proporcionado, tiene una clase MyApp que administra varias páginas, como PageOne y PageTwo. Normalmente, el controlador actúa como mediador entre diferentes partes de la aplicación y facilita la comunicación. Así es como puedes usar el controlador para obtener datos variables:

  1. Agrega una referencia al controlador en cada clase de página:

    class PageOne(ttk.Frame):
        def __init__(self, parent, controller):
            self.controller = controller
  2. Cree un método en el controlador para obtener una instancia de página por su nombre de clase:

    class MyApp(Tk):
        def get_page(self, classname):
            for page in self.frames.values():
                if str(page.__class__.__name__) == classname:
                    return page
  3. Acceder a los miembros públicos de la página de destino desde otra página:

    class PageTwo(ttk.Frame):
        def print_it(self):
            page_one = self.controller.get_page("PageOne")
            value = page_one.some_entry.get()

Almacenamiento de datos en el controlador

Alternativamente, puede considerar almacenar datos compartidos en el propio controlador, en lugar de en la página clases. Este enfoque desacopla las páginas entre sí y reduce la necesidad de un acoplamiento estrecho entre ellas. Así es como se puede implementar:

  1. Cree una estructura de datos en el controlador para almacenar todos los datos compartidos:

    class MyApp(Tk):
        def __init__(self):
            self.app_data = {"name": StringVar(),
                             "address": StringVar()}
  2. Modifique cada página para hacer referencia a la estructura de datos del controlador al crear widgets:

    class PageOne(ttk.Frame):
        def __init__(self, parent, controller):
            self.controller = controller
            self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"])
  3. Acceda a los datos compartidos desde el controlador en lugar de las clases de página :

    class PageTwo(ttk.Frame):
        def print_it(self):
            value = self.controller.app_data["address"].get()

Al implementar uno de estos enfoques, puede compartir datos variables de manera efectiva entre diferentes clases de páginas dentro de su aplicación GUI. El enfoque basado en controladores proporciona un acoplamiento estrecho y un punto de control centralizado para la comunicación, mientras que el almacenamiento de datos en el controlador promueve el desacoplamiento y la flexibilidad. La elección del enfoque depende de los requisitos específicos de su aplicación y del nivel de interacción e intercambio de datos necesario entre las páginas.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3