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 :

problème avec toplevel


Sujet :

Tkinter Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut problème avec toplevel
    Voici un extrait de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def annuler():
    	listbox1.select_clear(0,END)
    	message2.destroy()
     
    message2=Toplevel(bg='red')
    label1=Label(message2,text=message)
    label1.grid()
    bouton2=Button(message2,text='OK',command=message2.destroy)
    bouton2.grid()
    bouton3=Button(message2,text='ANNULER',command=annuler )
    bouton3.grid()
    Je ne comprends pas pourquoi la ligne listbox1.select_clear(0,END) fonctionne alors que message2.destroy() ne fonctionne pas. Je reçois le message :
    NameError: global name 'message2' is not defined

    Merci à tous pour vos explications...

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Bonjour,
    l'extrait de ton code est un peu cours, je ne vois pas ou est défini ton listbox1.

    Pour moi il est normal que Message2 ne soit pas reconnu dans ta fonction, puisque tu ne l'as pas défini comme variable ou parametre de ta fonction.
    deux solution :
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def annuler(message):
    	listbox1.select_clear(0,END)
    	message.destroy()
    message2=Toplevel(bg='red')
    label1=Label(message2,text=message)
    label1.grid()
    bouton2=Button(message2,text='OK',command=message2.destroy)
    bouton2.grid()
    bouton3=Button(message2,text='ANNULER',lambda message=message2:annuler(message))
    bouton3.grid()
    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def annuler():
         global message2
         listbox1.select_clear(0,END)
         message2.destroy()
    
    message2=Toplevel(bg='red')
    label1=Label(message2,text=message)
    label1.grid()
    bouton2=Button(message2,text='OK',command=message2.destroy)
    bouton2.grid()
    bouton3=Button(message2,text='ANNULER',command=annuler )
    bouton3.grid()
    Ps : je n'ai pas tester mais normalement l'une ou l'autre des solution doivent marcher.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Merci pour ta réponse.

    Ta remarque m'a aidé : listbox1 est défini dans le programme principal alors que Message2 est défini dans une fonction.

    Je revois mon code et j'examine les solutions que tu m'as proposées.

    Je te tiens au courant mais pas avant une bonne semaine.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Merci pour ta réponse.

    Ta remarque m'a aidé : listbox1 est défini dans le programme principal alors que Message2 est défini dans une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    listbox1=Listbox(frame2,width=20,height=10,selectmode=MULTIPLE)
    listbox1.pack(side=LEFT)
    Je revois mon code et j'examine les solutions que tu m'as proposées.

    Je te tiens au courant mais pas avant une bonne semaine.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Je viens de remettre de l'ordre dans mon code. Désormais tous les widgets sont définis dans le code principal et ça marche. Seul inconvénient : dans la fonction annuler() je ne peux pas utiliser : message.destroy() car dans ce cas la fenêtre ne serait pas réafficher par la fonction suppression_mot_cle().
    C'est pourquoi j'utilise message2.iconify() et message2.deiconify().
    Cependant tes solutions me paraissent très bonnes. 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
    23
    def annuler(): 
    	listbox1.select_clear(0,END)
    	message2.iconify()
     
    def suppression_mot_cle(): 
     	mots_cle_selectionnes=listbox1.curselection()
    	message2.deiconify()
    	message2.bell()
    	message="%s sera définitivement supprimer"%listbox1.get(mots_cle_selectionnes[0])
    	label4.config(text=message,bg='red')	
     
     
    listbox1=Listbox(frame2,width=20,height=10,selectmode=MULTIPLE)
    listbox1.pack(side=LEFT)
    message2=Toplevel(bg='red')
    message2.geometry('200x200')
    message2.title('Attention !')
    label4=Label(message2,bg='red')
    label4.grid()
    bouton_1=Button(message2,text='OK',command=ok_pour_suppression)
    bouton_1.grid()
    bouton_2=Button(message2,text='ANNULER',command=annuler)
    bouton_2.grid()

  6. #6
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    tu ne peux pas mettre la méthode destroy(), si tu ne quit pas ton widget avec la méthode quit.

    essai ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def annuler(): 
         listbox1.select_clear(0,END)
         message2.quit()
         message2.destroy()
    je n'ai pas testé mais ca devrait aller dans le bon sens

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Ceci me ferme toute l'application et j'avoue ne pas comprendre pourquoi...

  8. #8
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Et en mettant la création de message2 dans une fonction ?
    Et Un tkMessageBox ne conviendrait pas ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    ... effectivement je vais utiliser un tkMessageBox.

    Merci



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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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