Maison  >  Article  >  développement back-end  >  Comment accéder aux données StringVar d’une page Tkinter à une autre ?

Comment accéder aux données StringVar d’une page Tkinter à une autre ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 01:48:02334parcourir

How to Access StringVar Data from One Tkinter Page to Another?

Comment accéder aux données variables d'une classe

Résumé du problème

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).

Solution : exploiter votre contrôleur

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>

Solution alternative : stockage des données dans le contrôleur

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Des données au déploiementArticle suivant:Des données au déploiement