Dans le contexte de la programmation GUI, il est courant d'avoir plusieurs pages dans une seule fenêtre d'application. Chaque page peut contenir divers widgets, tels que des champs de saisie, des boutons ou des étiquettes. Lorsqu'il interagit avec ces widgets, l'utilisateur fournit des entrées ou fait des choix qui doivent être partagés sur différentes pages. Cela soulève la question de savoir comment accéder aux données variables d'une classe à une autre, en particulier lorsque ces classes représentent des pages différentes.
Une approche efficace consiste à exploiter le concept de classe de contrôleur. . Dans l'extrait de code fourni, vous disposez d'une classe MyApp qui gère plusieurs pages, telles que PageOne et PageTwo. Généralement, le contrôleur agit comme médiateur entre les différentes parties de l’application et facilite la communication. Voici comment utiliser le contrôleur pour obtenir des données variables :
Ajouter une référence au contrôleur dans chaque classe de page :
class PageOne(ttk.Frame):
def __init__(self, parent, controller):
self.controller = controller
Créez une méthode dans le contrôleur pour obtenir une instance de page par son nom de classe :
class MyApp(Tk):
def get_page(self, classname):
for page in self.frames.values():
if str(page.__class__.__name__) == classname:
return page
Accédez aux membres publics de la page cible à partir d'une autre page :
class PageTwo(ttk.Frame):
def print_it(self):
page_one = self.controller.get_page("PageOne")
value = page_one.some_entry.get()
Vous pouvez également envisager de stocker les données partagées dans le contrôleur lui-même, plutôt que dans la page cours. Cette approche découple les pages les unes des autres et réduit le besoin d'un couplage étroit entre elles. Voici comment cela peut être implémenté :
Créez une structure de données dans le contrôleur pour stocker toutes les données partagées :
class MyApp(Tk):
def __init__(self):
self.app_data = {"name": StringVar(),
"address": StringVar()}
Modifier chaque page pour référencer la structure de données du contrôleur lors de la création de 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"])
Accédez aux données partagées depuis le contrôleur au lieu des classes de page :
class PageTwo(ttk.Frame):
def print_it(self):
value = self.controller.app_data["address"].get()
En implémentant l'une de ces approches, vous pouvez partager efficacement des données variables entre différentes classes de pages au sein de votre application GUI. L'approche basée sur un contrôleur offre un couplage étroit et un point de contrôle centralisé pour la communication, tandis que le stockage des données dans le contrôleur favorise le découplage et la flexibilité. Le choix de l'approche dépend des exigences spécifiques de votre application et du niveau d'interaction et de partage de données nécessaire entre les pages.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3