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 :

multi fenêtres en python


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Août 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 30
    Par défaut multi fenêtres en python
    Bjr,
    Débutant, j'ai réalisé un programme en python 3.6.2:
    - un bouon appele une nouvelle fenêtre,
    - dans celle-ci on choisit un répertoire,
    - le nom du répertoire choisi devrait s'afficher dans le label de la 2ième fenêtre.
    Or, il m'est retourné une erreur :

    "Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Users\bernw\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
    File "C:/Users/bernw/Documents/Prog/Python/Prog/TransPhoto/ess3.py", line 15, in choixscr
    AffT1.config(text=rep)
    NameError: name 'AffT1' is not defined"
    Je joins une partie du programme:
    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
    ##############
    from tkinter import *
    from tkinter import ttk
    from tkinter import messagebox
    from tkinter.filedialog import *
    from os import *
    import tkinter as tk
     
     
    def choixscr(): #Répertoire Source   
        folder_path = "C:/Users/bernw/Pictures/Photos"
        choixrep(folder_path)
        print ("vous avez choisi le repertoire %s" % rep)
        AffT1.config(text=rep)
     
     
    def choixrep(repdef):  #Fenêtre choix répertoire  
        global rep
        rep = askdirectory(initialdir=repdef,title='Choisissez un repertoire')
        if len(rep) > 0:
            print ("vous avez choisi le repertoire %s" % rep)
     
    ################### Fen2 ####################       
    def ouvFen2():
        global fen2
        fen2=Toplevel()    
        fen2.grab_set()
        fen2.transient(fen2.master)
        fen2.focus_set()      
     
     
        txt1 = Label(fen2, text = 'Source').grid(row =0, sticky =E,pady =15,padx =10)    
        AffT1 = Label(fen2,bg='yellow', width=80)
        AffT1.grid(row =0, column =1,padx =5)
     
        Button(fen2,command=choixscr,text='Répertoire').grid(row=0 ,column=2,pady =15,padx =30,sticky =W)#Source
        Button(fen2,command=fen2.destroy,text='Fermer').grid(row=1, column=2,pady=10,padx =15)
     
     
     
    ################### Fen1 ####################    
    fen1 = Tk()
     
     
    txt1 = Label(fen1,text='Acquisition :').grid(row =0,column=2,sticky =E,pady =15,padx =10)
    Button(fen1,command=ouvFen2,text='Choix').grid(row=0, column=3,pady=10,padx =15)
    Button(fen1,command=fen1.destroy,text='Quitter').grid(row=3, column=3,pady=10,padx =15)
     
     
    fen1.configure(bd=10)
    fen1.mainloop()
    ###########################

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

    Ce Label est crée par la fonction ouvFen2 qui l'assigne à AffT1 qui est, par défaut, une variable locale: impossible d'y accéder depuis une autre fonction d'où le "NameError". Essayez de relire les chapitres qui parlent de fonctions et de portée des variables dans votre tutoriel préféré. A défaut, celui qui est livré avec Python (et qui est disponible en français) raconte cela ici.

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

  3. #3
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Août 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 30
    Par défaut
    Merci,
    J'ai rajouté les lignes :
    rep=StringVar()
    global AffT1
    juste au dessus des contrôles, je n'ai plus de message d'erreur mais mon label ne s'actualise pas.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par bern59 Voir le message
    J'ai rajouté les lignes :
    rep=StringVar()
    global AffT1
    juste au dessus des contrôles, je n'ai plus de message d'erreur mais mon label ne s'actualise pas.
    "au dessus des contrôles" est beaucoup plus ambigu qu'un numéro de ligne et poster la dernière version de votre code serait encore plus clair.

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

  5. #5
    Membre averti
    Homme Profil pro
    retraité
    Inscrit en
    Août 2017
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 30
    Par défaut multi fen.
    J'ai trouvé une solution(batarde, peut-être) : je rappelle mes labels dans la routine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def choixscr(): #Répertoire Source   
        folder_path = "C:/Users/bernw/Pictures/Photos"
        choixrep(folder_path)
        global repscr
        repscr=rep
        print('enr dans source de : ',repscr)
        Label(fen2, text=repscr,bg='yellow', width=wl).grid(row =0, column =1,padx =....
    ma réponse précédante est à invalider.

    Merci.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par bern59 Voir le message
    J'ai trouvé une solution(batarde, peut-être) : je rappelle mes labels dans la routine.
    Vous ne rappelez rien du tout: vous fabriquez un nouvel Label qui va se superposer au premier.
    Pour l'instant, vous avez des difficultés avec les concepts de portée des variables et des fonctions.
    Ca serait bien de les réviser plutôt que de perdre un temps fou à secouer les instructions dans tous les sens pour que çà tombe en marche sans trop comprendre pourquoi.

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Application multi-fenêtrée
    Par evilnet dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 06/04/2007, 20h39
  2. Gestion multi fenêtres
    Par windsor dans le forum WinDev
    Réponses: 1
    Dernier message: 27/03/2007, 00h06
  3. Réponses: 3
    Dernier message: 14/03/2007, 13h01
  4. Effectuer du multi THREAD en python
    Par parp1 dans le forum Général Python
    Réponses: 3
    Dernier message: 10/05/2006, 12h56
  5. Réponses: 2
    Dernier message: 26/01/2006, 21h59

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