Maison >développement back-end >Tutoriel Python >Comment partager des données entre classes dans une application multipage ?
Comment accéder aux données variables entre les classes dans une application multipage
Dans une application multipage où chaque page est définie par un classe séparée, l'accès aux données variables entre les classes peut être difficile.
Exploiter le contrôleur
Une approche consiste à utiliser la classe du contrôleur d'application pour faciliter la communication entre les pages. Ajoutez une référence au contrôleur au constructeur de chaque page :
<code class="python">class PageOne(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ...</code>
Ensuite, ajoutez une méthode au contrôleur qui récupère une instance de page en fonction de son nom de classe :
<code class="python">class MyApp(Tk): ... def get_page(self, classname): for page in self.frames.values(): if str(page.__class__.__name__) == classname: return page return None</code>
Ensuite, à partir de dans une page, vous pouvez accéder aux données variables d'une autre 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 éviter un couplage étroit entre les pages, envisagez de stocker les données dans le contrôleur plutôt que dans des pages spécifiques :
<code class="python">class MyApp(Tk): def __init__(self): ... self.app_data = {"name": StringVar(), "address": StringVar(), ... }</code>
Puis, au sein de chaque page, référencez la structure des données du contrôleur lors de la création des widgets :
<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>
Enfin, accédez directement aux données du contrôleur :
<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!