Maison > Article > développement back-end > Comment accéder aux données StringVar d’une page Tkinter à une autre ?
Vous disposez de plusieurs pages de widgets collectant les entrées de l'utilisateur dans une application Tkinter multipage . Chaque page est instanciée en tant que classe dans l'application principale, mais vous rencontrez des difficultés pour obtenir la valeur d'un StringVar à partir d'un widget dans une page (PageOne) dans une autre page (PageTwo).
En utilisant le contrôleur, vous pouvez établir une communication entre les pages. Tout d'abord, enregistrez 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>
Deuxièmement, incorporez une méthode dans le contrôleur qui récupère 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>
Avec ceci méthode, les pages peuvent accéder les unes aux autres en appelant cette fonction et en obtenant une référence à la page cible. Par la suite, vous pouvez accéder aux membres partagés de cette page, comme ceci :
<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>
Pour éviter un couplage étroit entre les pages, pensez à stocker les données partagées dans le contrôleur. Cette méthode permet aux pages d'être indépendantes des conceptions internes les unes des autres :
<code class="python">class MyApp(Tk): def __init__(self): ... self.app_data = {"name": StringVar(), "address": StringVar(), ... }</code>
Modifiez les pages pour référencer le contrôleur lors de la création de 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 aux données du contrôleur, en éliminant le besoin de get_page :
<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!