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

Tkinter Python Discussion :

Mise à jour d'un treeview entre toplevel et fenêtre principale


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Par défaut Mise à jour d'un treeview entre toplevel et fenêtre principale
    Bonjour,
    Je me gratte la tête depuis un moment mais je n'y arrive pas donc je viens vous demander de l'aide.

    Dans ma fenêtre principale j'ai un treeview(tk) qui est alimenté par une bdd sql3 et une fonction affichage.
    Pour créer de nouvelle donnée, j'ai un toplevel qui enregistre les valeur saisi dans la bdd.
    J’essaie d'activer la fonction affichage depuis le toplevel afin que la prise en compte de la nouvelle ligne du treeview soit prise en compte immédiatement.

    Je me retrouve avec le message suivant : "AttributeError: module 'Main' has no attribute 'affichage'

    Actuellement, la nouvelle ligne n'apparait que lorsque j'active affichage par un bouton dans la fenêtre principale.

    Si quelqu'un peut me décoincé, je lui en serai reconnaissant
    merci

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par cegehi Voir le message
    Je me retrouve avec le message suivant : "AttributeError: module 'Main' has no attribute 'affichage'
    Ce qui signifie que la méthode affichage n'est pas une méthode associée à Main...
    Citation Envoyé par cegehi Voir le message
    Actuellement, la nouvelle ligne n'apparait que lorsque j'active affichage par un bouton dans la fenêtre principale.
    Tu peux par exemple lancer un événement 'maison' lors de la validation(voir event_generate()). Événement que tu associes à ta méthode affichage() (via bind())

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2013
    Messages : 25
    Par défaut
    Bonjour,

    Ce qui signifie que la méthode affichage n'est pas une méthode associée à Main...
    Je débute et je ne vois pas ce que cela veut dire, puisque pour moi affichage est une procédure qui fonctionne dans Main.
    Mais si on parle de méthode, c'est que je dois passer par un objet ?


    Tu peux par exemple lancer un événement 'maison' lors de la validation
    Effectivement, j'ai associé l'évènement <Enter> à ma fenêtre principale et ça marche.
    Quand je quitte la toplevel et que j'entre dans main, l'évènement à lieu.
    Ça fonctionne aussi avec l'évènement <Destroy> quand je ferme la fenêtre.

    Mais il doit bien y avoir une solution pour que lorsque je valide mes modifications dans la toplevel grâce à un bouton "Valider",
    la fonction Affichage de Main soit actionnée? Certainement en passant par une class d'après ta première remarque...

    Si quelqu'un peut me donner un petit exemple pédagogique, ce serait plus clair pour moi
    Merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par cegehi Voir le message
    Si quelqu'un peut me donner un petit exemple pédagogique, ce serait plus clair pour moi
    Ce que vous essayez de faire s'appelle "fenêtre de dialogue".

    Vous avez des classes dans tkinter pour aider à leur mise en place (et des exemples d'utilisation à butiner sur le ouèbe).

    Sorti de là, si vous vous fabriquer vos propres interactions entre widgets, vous devez commencer par faire un petit exemple qui essaie de traduire ce que vous voulez faire pour comprendre les mécanismes qui font que ça marche.

    Et si vous ne vous en sortez pas, vous aurez un code à poster.

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

  5. #5
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par cegehi Voir le message

    Si quelqu'un peut me donner un petit exemple pédagogique, ce serait plus clair pour moi
    Merci
    Bonjour,
    Voici un exemple d'interaction possible entre les classes via un evenement pour prévenir à la classe main que le traitement de la classe B est fini.
    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
    import tkinter as tk
     
    class Main:
        def __init__(self, can):
            self.can = can
            self.can.bind('<<mon_event>>', self.affichage)
            self.create_t = self.can.create_text(100, 100, text='Patatipatata', anchor="w")
            self.b = B(self.can)
     
        def affichage(self, event):
            self.can.itemconfig(self.create_t, text=self.b.ma_string)
     
     
    class B(tk.Toplevel):
        def __init__(self, can):
            tk.Toplevel.__init__(self)
            self.can = can
            self.ma_string = "string définie dans B"
            self.after(2000, lambda: self.can.event_generate('<<mon_event>>')
     
     
    root = tk.Tk()
    can = tk.Canvas(root)
    can.grid()
    m = Main(can)
    root.mainloop()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Il est préférable de réserver event_generate à la simulation d'entrées utilisateurs. Ici, on peut très bien s'en passer en appelant directement la méthode:
    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
    import tkinter as tk
     
    class Main:
        def __init__(self, can):
            self.can = can
            self.create_t = self.can.create_text(100, 100, text='Patatipatata', anchor="w")
            self.b = B(self.affichage)
     
        def affichage(self, text):
            self.can.itemconfig(self.create_t, text=text)
     
     
    class B(tk.Toplevel):
        def __init__(self, affichage):
            tk.Toplevel.__init__(self)
            ma_string = "string définie dans B"
            self.after(2000, affichage, ma_string)
     
     
    root = tk.Tk()
    can = tk.Canvas(root)
    can.grid()
    m = Main(can)
    root.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Effectivement.
    Merci

Discussions similaires

  1. Mise à jour de 2 tables entre elles
    Par AlbertM dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/12/2012, 12h13
  2. [Débutant] mise à jour d'un graphe entre 2 fonctions
    Par Luis Vieira da Silva dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 06/07/2009, 13h20
  3. Mise à jour conditionnelle de liaisons entre 3 fichiers
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 68
    Dernier message: 24/09/2007, 13h22
  4. mise à jour massive des tables entre 2 bases oracle
    Par rihojaniero dans le forum Oracle
    Réponses: 1
    Dernier message: 13/10/2006, 08h22
  5. mise à jour automatique de champs entre 2 tables
    Par romdyane dans le forum Access
    Réponses: 5
    Dernier message: 11/10/2005, 18h51

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