Maison > Article > développement back-end > Comment transmettre des données entre les pages dans une application multipage Tkinter ?
Problème :
Dans une application multipage utilisant Tkinter, comment Une classe sur une page peut-elle accéder aux données variables stockées dans une classe sur une page différente ?
Exploiter votre contrôleur :
En supposant que vous utilisez déjà un contrôleur, vous peut l'exploiter pour la communication entre les pages.
Stocker une référence au contrôleur dans chaque page :
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ... class PageTwo(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ...</code>
Créer une méthode dans le contrôleur pour récupérer une page en fonction de son nom de classe :
<code class="python">class MyApp(Tk): def get_page(self, classname): '''Returns an instance of a page given it's class name as a string''' for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page return None</code>
Dans la page qui doit accéder aux données, utilisez la méthode get_page :
<code class="python">class PageTwo(ttk.Frame): def print_it(self): page_one = self.controller.get_page("PageOne") value = page_one.some_entry.get() print ('The value stored in StartPage some_entry = %s' % value)</code>
Stockage des données dans le contrôleur :
Pour réduire le couplage entre les pages, pensez à stocker les données partagées dans le contrôleur.
Créer une structure de données dans le contrôleur pour stocker les variables :
<code class="python">class MyApp(Tk): def __init__(self): ... self.app_data = {"name": StringVar(), "address": StringVar(), ... }</code>
Mettre à jour les pages pour référencer les données du contrôleur :
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller=controller ... self.some_entry = ttk.Entry(self, textvariable=self.controller.app_data["name"], ...) </code>
Accédez aux données du responsable du traitement :
<code class="python"> def print_it(self): value = self.controller.app_data["address"].get() ...</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!