"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como compartilhar dados variáveis ​​entre páginas diferentes em um aplicativo GUI?

Como compartilhar dados variáveis ​​entre páginas diferentes em um aplicativo GUI?

Publicado em 2024-11-06
Navegar:475

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

Como obter dados variáveis ​​de uma classe

No contexto da programação GUI, é comum ter várias páginas em uma única janela do aplicativo. Cada página pode conter vários widgets, como campos de entrada, botões ou rótulos. Ao interagir com esses widgets, o usuário fornece informações ou faz escolhas que precisam ser compartilhadas em diferentes páginas. Isso levanta a questão de como acessar dados variáveis ​​de uma classe para outra, especialmente quando essas classes representam páginas diferentes.

Aproveitando seu controlador

Uma abordagem eficaz envolve aproveitar o conceito de uma classe de controlador . No snippet de código fornecido, você tem uma classe MyApp que gerencia várias páginas, como PageOne e PageTwo. Normalmente, o controlador atua como mediador entre diferentes partes da aplicação e facilita a comunicação. Veja como você pode usar o controlador para obter dados variáveis:

  1. Adicione uma referência ao controlador em cada classe de página:

    class PageOne(ttk.Frame):
        def __init__(self, parent, controller):
            self.controller = controller
  2. Crie um método no controlador para obter uma instância de página por seu nome de classe:

    class MyApp(Tk):
        def get_page(self, classname):
            for page in self.frames.values():
                if str(page.__class__.__name__) == classname:
                    return page
  3. Acesse os membros públicos da página de destino de outra página:

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

Armazenando dados no controlador

Como alternativa, você pode considerar armazenar dados compartilhados no próprio controlador, em vez de na página aulas. Essa abordagem desacopla as páginas umas das outras e reduz a necessidade de um acoplamento forte entre elas. Veja como isso pode ser implementado:

  1. Crie uma estrutura de dados no controlador para armazenar todos os dados compartilhados:

    class MyApp(Tk):
        def __init__(self):
            self.app_data = {"name": StringVar(),
                             "address": StringVar()}
  2. Modifique cada página para fazer referência à estrutura de dados do controlador ao criar 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. Acesse os dados compartilhados do controlador em vez das classes de página :

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

Ao implementar uma dessas abordagens, você pode compartilhar efetivamente dados variáveis ​​entre diferentes classes de página em seu aplicativo GUI. A abordagem baseada em controlador fornece acoplamento rígido e um ponto de controle centralizado para comunicação, enquanto o armazenamento de dados no controlador promove dissociação e flexibilidade. A escolha da abordagem depende dos requisitos específicos da sua aplicação e do nível de interação e compartilhamento de dados necessário entre as páginas.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3