IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GUI Python Discussion :

Ajouter élément à une listbox depuis une autre class


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Décembre 2019
    Messages : 4
    Par défaut Ajouter élément à une listbox depuis une autre class
    Bonjour,
    Est-il possible d'ajouter un élément a une listbox depuis une méthode d'une autre class.
    j'ai déjà essayé plusieurs solutions mais rien ne fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    from tkinter import *
    import copy
     
    #######################################
    # corps principal du programme :
     
    class FenetreUn (Frame):
     
        def __init__ (self, master) :
            """Constructeur de notre classe"""
            Frame.__init__(self, master)
            self ['bg']="azure3"
            self.pack()
            self.button = Button (self, width = 12, height = 2,
                text ="ajouter", command = self.ajouter, bg = "SeaGreen1")
            self.button.pack()
     
        def ajouter (self):
            ma_fenetre = FenetreDeux 
            ma_fenetre.ajouter_element2 ( "bonjour")
            #cette methode devrait ajouter une ligne a la listbox_designation
     
    class FenetreDeux (Frame):
     
         def __init__ (self, master) :
            """Constructeur de notre classe"""
            Frame.__init__(self, master)
            self ['bg']="azure3"
            self.pack()
            self.listbox_designation = Listbox (self, width = 15, height = 18, bd 
                = 0, bg = "gray95", highlightcolor = "gray95", activestyle = "none")
            self.listbox_designation.pack()
            self.listbox_designation.insert (END, "designation")
            self.listbox_designation.insert (END, "une de plus")
            self.ajouter_element ("3 ème ligne")
     
         def ajouter_element (self, designation):
             """Méthode pour ajouter une ligne a la listbox"""
             self.listbox_designation.insert (END, designation)
     
         def ajouter_element2 (designation):
             print (designation)
     
    class Application(Frame):
        """
        Fenêtre principale de l'application
        """
        def __init__(self):
            """Constructeur de notre classe"""
            Frame.__init__(self)
            self.master['bg']="azure3"
            self.master.title("Fenêtre principale")
            self.master.resizable(width=False, height=False) 
            # Fenetre non resizable
            self.master.geometry("950x550+0+0")
            self ['bg'] = "azure3"
            self.pack()
     
            # frame_1
            self.frame_1 = Frame(self)
            self.frame_1.grid (row = 1, column = 1, padx=30, pady=30)
            self.ma_fenetre_1 = FenetreUn(self.frame_1)
     
            # frame_2
            self.frame_2 = Frame(self)
            self.frame_2.grid (row = 1,column = 2, padx=30, pady=30)
            self.ma_fenetre_2 = FenetreDeux(self.frame_2)
     
    if __name__ == "__main__":
        Application().mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Fabriquez 2 class A et B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A:
         def do_show(self, s):
               print (s)
     
    class B:
         pass
    Par quoi remplacer "pass" pour qu'une instance de B puisse appeler la méthode do_show d'une instance de A?
    Si vous ne savez pas répondre à cette question, il faut passer du temps à apprendre la POO (qui n'a rien de spécifique à Python)...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Décembre 2019
    Messages : 4
    Par défaut
    Si je crée une instance de A a=A() je passe par le constructeur et j'ai un nouvel objet donc je perds les anciens éléments de ma listbox.
    Si je crée une reference a=A il me manque le (self).
    Il y a peut être une bonne solution, mais ou ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par alain ryckaert Voir le message
    Il y a peut être une bonne solution, mais ou ?
    Vous avez plusieurs solutions:
    • Créer l'instance de A et la passer en paramètre à la création de l'instance de B,
    • Faire que ce soit B qui crée l'instance de A (lors de sa création ou plus tard),
    • Créer les instances de A et de B puis passer à l'instance de B l'instance de A via une méthode du genre .set_A,
    • Créer par une "registry": un singleton qui permet à l'instance de B de récupérer l'instance de A ou la Listbox.
    • Utiliser la "registry" inhérente à Tkinter,

    Ceci dit apprendre la POO n'est pas un pré-requis pour programmer une application simple avec tkinter: profitez en.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Décembre 2019
    Messages : 4
    Par défaut
    Un grand merci pour les solutions.
    Il me reste à bossé la POO

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/07/2015, 11h49
  2. Rajouter des éléments dans une collection depuis une autre classe
    Par Sup3rc0c0 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 15/03/2012, 17h48
  3. Acceder a une listbox depuis d'autre form avec une class
    Par NazOok dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/05/2011, 11h16
  4. Ajout d'objets graphiques depuis une autre classe
    Par metalamania dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 27/07/2010, 15h55
  5. Réponses: 9
    Dernier message: 15/03/2010, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo