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.
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:
Adicione uma referência ao controlador em cada classe de página:
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
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
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()
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:
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()}
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"])
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.
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