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

Python Discussion :

tkinter - mise à jour d'un champ label


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 486
    Par défaut tkinter - mise à jour d'un champ label
    Bonjour,

    Dans une boite de dialogue tkinter, j'ai un champ label et un bouton, Quand je clique sur le bouton, ça ouvre une boite de dialogue de sélection d'un fichier, et je doit mettre à jour le label avec le chemin du fichier sélectionné.
    Cette boite de dialogue tkinter s'ouvre quand je clique sur un menu de l'interface principale.

    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
     
    def br2Box(self):
     
            self.mv = Toplevel()
            self.mv.title('Export mavlink .tlog')
            self.mv.transient() 	        # Réduction popup impossible 
            self.mv.grab_set()		        # Interaction avec fenetre jeu impossible
            self.mv.focus()		        # Focus sur la fenetre popup
     
            file_input = tk.Frame(self.mv, bg='green')
            footer = tk.Frame(self.mv)
     
            self.mv.columnconfigure(0, weight=1) # 100% 
     
            self.mv.rowconfigure(0, weight=1) # 10%
            self.mv.rowconfigure(1, weight=1) # 80%
     
            file_input.grid(row=0, sticky='news')
            footer.grid(row=1)
     
            self.mv.input_path = StringVar()
            self.mv.lbl_fin0 = tk.Label(file_input, text="Fichier .tlog")
            self.mv.lbl_fin0.grid(row=0, column=0, padx=5, pady=5)
            self.mv.lbl_fin = tk.Label(file_input, width=30, textvariable=self.mv.input_path)
            self.mv.lbl_fin.grid(row=0, column=1, padx=5, pady=5)
            self.mv.btn_fin = Button(file_input, text='...', width=5, command=self.fileSelect)
            self.mv.btn_fin.grid(row=0, column=2, padx=5, pady=5)
     
            self.mv.btn_OK = Button(footer, text='OK', width = 10, command=self.mv.destroy)
            self.mv.btn_OK.grid(column=0, row=0, padx=5, pady=5)
            self.mv.btn_Cancel = Button(footer, text='Annuler', width = 10, command=self.mv.destroy)
            self.mv.btn_Cancel.grid(column=1, row=0, padx=5, pady=5)
     
     
        def fileSelect(self):
            f = askopenfilename(title="Ouvrir votre document", \
                                filetypes=[('logfile','.tlog'), ('all files','.*')], \
                                initialdir=os.path.dirname(os.path.abspath(__file__)))
            print(f)
            self.mv.input_path.set(f)
            self.mv.lbl_fin.update_idletasks()
    L'instruction print(f) dans la fonction fileSelect() m'affiche bien le chemin du fichier sélectionné, mais le champ label ne se met pas à jour.
    Pourquoi?

    Merci,
    Nico

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

    Citation Envoyé par DiverSIG Voir le message
    L'instruction print(f) dans la fonction fileSelect() m'affiche bien le chemin du fichier sélectionné, mais le champ label ne se met pas à jour.
    Où avez vous appris à coder?

    Ce n'est pas parce que Python ne vous interdit pas de créer un attribut dynamiquement que vous pouvez vous permettre de le faire (voir lignes 21 à 32 de votre code).

    Puisque apparemment vous connaissez les "class", il serait plus sain de créer une classe à part plutôt que de polluer une classe tierce parce que vous ne voulez pas encombrer la votre de ces attributs. Et comme il s'agit d'une fenêtre de dialogue, vous avez des tutos pour apprendre à les écrire (et les modules tkinter.sampledialog, tkinter.dialog qui sont là pour çà).

    Soyez cohérent: soit vous écrivez "import tkinter as tk" et vous préfixez la création d'objets par "tk.", soit vous écrivez "from tkinter import *" et vous ne préfixez rien.

    Lorsque vous rencontrez un problème, la première chose à faire est de le réduire pour arriver à le reproduire avec le moins de code possible. Outre que cela montre que vous avez essayé de faire quelque chose pour comprendre le problème de votre côté, cela permettrait à des moins débutants que vous de le reproduire, et de vous suggérer une solution.

    A défaut, pas grand monde ne pourra vous aider sinon de vieux barbus un peu grincheux qui pointeront tous les défauts de votre code. Pourtant, à défaut de pouvoir reproduire et essayer de comprendre, il ne reste que la jugeote de ces experts là.

    Et l'expérience dit que vous avez probablement créé plusieurs instances de Tk dans votre programme, et comme vous avez omis de préciser le master du StringVar associé à votre Label, ils se retrouvent dans des espaces différents (et si çà met à jour le StringVar, il n'a pas pu associer le Label à ce StringVar là, donc on ne voit rien changer).

    Vous avez 2 mauvaises solutions: mettre à jour le Label directement (sans passer de StringVar), préciser le master du StringVar via StringVar(file_input).
    La bonne solution étant de n'avoir qu'une seule instance de Tk...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/01/2007, 09h33
  2. Réponses: 4
    Dernier message: 25/01/2006, 15h42
  3. mise à jour d'un champ date
    Par Flagny dans le forum Access
    Réponses: 11
    Dernier message: 14/11/2005, 07h30
  4. mise à jour automatique de champs entre 2 tables
    Par romdyane dans le forum Access
    Réponses: 5
    Dernier message: 11/10/2005, 18h51
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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