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 :

Explications Toplevel() tkinter


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut Explications Toplevel() tkinter
    Bonjour,

    Je cherche des explications et des informations concernant le fonctionnement de la classe Toplevel(), la documentation étant trop pauvre à mon goût...

    Voilà le code qui m'intrigue :

    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
    from Tkinter import *
    class Application(Frame):   
        def __init__(self, fenetre, **kwargs):
            Frame.__init__(self, fenetre,**kwargs)
            self.pack()
    
            fenetre.title('My Application')
            self.clic1=Button(self, text= "CONSULTER", command=self.Consultation, bg='white', borderwidth=1)
    
        def Consultation(self):
             var_texte1=StringVar()
             csl=Toplevel(self)
             txt1 = Label(csl, text = 'Premier champ :')
             txt1.grid(row =1, column =1)
    
             entr1 = Entry(csl, textvariable=var_texte1, bd =5)
             entr1.grid(row =1, column =2)
    
             clic1=Button(csl, text= "CLIQUEZ ICI", command=self.Consulter, bg='white')
             clic1.grid(row=1, column =3, columnspan =3, padx =4, pady =4)
    
             csl.mainloop()
    
        def Consulter(self):
           if entr1.get()=='':
               showerror ('ERROR', 'Please enter a something')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # -*-coding:Latin-1 -*
    from Tkinter import *
    from Application import *
     
    fenetre = Tk()
     
    interface = Application(fenetre)
    interface.mainloop()
    J’obtiens ce message d'erreur NameError: global name 'entr1' is not defined.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par hichem0550 Voir le message
    J’obtiens ce message d'erreur NameError: global name 'entr1' is not defined.
    La portée des variables et/ou comment utiliser/définir des attributs de classes n'a rien à voir avec tkinter ou les Toplevel. Et comme votre code est complètement incohérent sur ces sujets, difficile de vous dire autre chose que d'aller revoir ces concepts.

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

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    La portée des variables et/ou comment utiliser/définir des attributs de classes n'a rien à voir avec tkinter ou les Toplevel. Et comme votre code est complètement incohérent sur ces sujets, difficile de vous dire autre chose que d'aller revoir ces concepts.

    - W
    Merci.

    Ma question est :

    Est ce que c'est possible de récupérer les valeurs de widgets (par exemple enter.get) qui sont définis sur Toplevel d’après la fenêtre tk.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Rebonjour,

    Imaginons une fenêtre root avec un bouton. Le bouton déclenche l'ouverture d'une fenêtre Toplevel. La fenêtre Toplevel contient un bouton qui affiche
    la valeur de widget enter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    csl=Toplevel()
    txt1 = Label(csl, text = '1er champs :')
    entr1= Entry(csl, textvariable=var_texte1, bd =5)
    txt1.grid(row =1, column =1)
    entr1.grid(row =1, column =2)
    clic1=Button(csl, text= "CONSULTER", command=Consulter, bg='white')
    clic1.grid(row=1, column =3, columnspan =3, padx =4, pady =4)
    
    def Consulter():
        print entr1.get()
    J'obtiens ce message d'erreur UnboundLocalError: local variable 'Consulter' referenced before assignment

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Encore mieux,

    J'ai ce code :

    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
     
    from Tkinter import *
     
    root = Tk()
     
    def zut():
        t=Toplevel()
        a=Button(t,text='A la niche!',command=con)
        a.pack()
     
        def con():
          print "bonjour"
     
     
     
    b = Button(root, text='Zou', command=zut)
    b.pack()
     
    root.mainloop()
    Problème UnboundLocalError: local variable 'con' referenced before assignment

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hichem0550 Voir le message
    Rebonjour,

    Imaginons une fenêtre root avec un bouton. Le bouton déclenche l'ouverture d'une fenêtre Toplevel. La fenêtre Toplevel contient un bouton qui affiche
    la valeur de widget enter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    csl=Toplevel()
    txt1 = Label(csl, text = '1er champs :')
    entr1= Entry(csl, textvariable=var_texte1, bd =5)
    txt1.grid(row =1, column =1)
    entr1.grid(row =1, column =2)
    clic1=Button(csl, text= "CONSULTER", command=Consulter, bg='white')
    clic1.grid(row=1, column =3, columnspan =3, padx =4, pady =4)
    
    def Consulter():
        print entr1.get()
    J'obtiens ce message d'erreur UnboundLocalError: local variable 'Consulter' referenced before assignment
    Vous utilisez la variable Consulter avant de l'avoir définie... Donc çà plante en NameError ou en autre chose... parce que Python est un langage interprété: pour exécuter vos instructions toutes les variables doivent avoir été définies.
    Cà n'a rien à voir avec ce que vous faites avec tkinter mais ce sont des bases de la programmation avec Python que vous devez apprendre à maîtriser avant de vouloir coder avec des bibliothèques un peu plus compliquées. (et je vous ai déjà donné les chapitres du Swinnen à (re)lire dans mon post précédent).

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

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vous utilisez la variable Consulter avant de l'avoir définie... Donc çà plante en NameError ou en autre chose...
    Cà n'a rien à voir avec ce que vous faites avec tkinter mais ce sont des bases de la programmation avec Python que vous devez apprendre à maîtriser avant de vouloir coder avec des bibliothèques un peu plus compliquées. (et je vous ai déjà donné les chapitres du Swinnen à (re)lire dans mon post précédent).

    - W
    Merci. Il faut que la fonction con sur cet exemple se trouve avant la déclaration du button.

    Merci.

    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
     
    from Tkinter import *
     
    root = Tk()
     
    def zut():
        t=Toplevel()
     
        def con():
          print "bonjour"
     
        a=Button(t,text='A la niche!',command=con)
        a.pack()
     
     
     
     
     
    b = Button(root, text='Zou', command=zut)
    b.pack()
     
    root.mainloop()

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par hichem0550 Voir le message
    Merci. Il faut que la fonction con sur cet exemple se trouve avant la déclaration du button.
    Il faut que la variable soit définie lorsque l'interpréteur va exécuter l'instruction qui en a besoin.
    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
     
    from Tkinter import *
     
    root = Tk()
     
    def zut():
        t=Toplevel()
        a=Button(t,text='A la niche!',command=foo)
        a.pack()
     
    b = Button(root, text='Zou', command=zut)
    b.pack()
     
    def foo():
        print "bonjour"
     
    root.mainloop()
    Placez "root.mainloop()" avant le "def foo" et essayez de comprendre pourquoi çà ne fonctionne plus.

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

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il faut que la variable soit définie lorsque l'interpréteur va exécuter l'instruction qui en a besoin.
    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
     
    from Tkinter import *
     
    root = Tk()
     
    def zut():
        t=Toplevel()
        a=Button(t,text='A la niche!',command=foo)
        a.pack()
     
    b = Button(root, text='Zou', command=zut)
    b.pack()
     
    def foo():
        print "bonjour"
     
    root.mainloop()
    Placez "root.mainloop()" avant le "def foo" et essayez de comprendre pourquoi çà ne fonctionne plus.

    - W
    ok Merci beaucoup.

Discussions similaires

  1. Débutant cherche explications sur Tkinter
    Par Khar14 dans le forum Général Python
    Réponses: 3
    Dernier message: 23/09/2014, 12h37
  2. Tkinter interface graphique Toplevel
    Par beber74 dans le forum Tkinter
    Réponses: 3
    Dernier message: 13/04/2013, 10h28
  3. Réponses: 4
    Dernier message: 17/04/2008, 23h27
  4. [tkinter] maintien d'un toplevel en 1er plan
    Par airod dans le forum Tkinter
    Réponses: 1
    Dernier message: 07/03/2006, 16h28
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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