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 de fenêtres Tkinter


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Problème de fenêtres Tkinter
    Bonjour,

    J'ai développé un peu mon programme mais voilà, je me confronte à un nouveau problème de fenêtres. Dans mon programme, l'utilisateur choisis un nombre d'éléments qui ensuite servira à créer automatiquement des objets. Quand il clique sur valider, une nouvelle fenêtre (ici fen_simulation) se créé et la fenêtre intro est détruite. Seulmenet voilà, il détruit la 1ère fenêtre et ne créé pas la seconde. En revanche, si je retire du code la boucle while en dessous de la ligne fen_simulation=Tk() dans la fonction simulation(), là, il redessine bien la nouvelle fenêtre. Je ne comprend pas donc là la logique. Mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # -*- coding: cp1252 -*-
     
    from Tkinter import *
     
    fen_intro=Tk()
     
    def simulation():
        nb_elements=def_nb_elements.get()
        repeat=1
        fen_intro.destroy()
        fen_simulation=Tk()
        while (repeat<nb_elements):
            exec ('element'+str(repeat)+'=Button(fen_simulation)')
            exec ('element'+str(repeat)+'.pack()')
            repeat=repeat+1
     
    label_nb_elements=Label(fen_intro,text="Choisissez le nombre d'éléments à incorporer au modèle")
    label_nb_elements.pack()
     
    def_nb_elements=Entry(fen_intro)
    def_nb_elements.pack()
     
    boutton_validation=Button(fen_intro,text='Valider',command=simulation)
    boutton_validation.pack()
     
    boutton_quitter=Button(fen_intro,text='Quitter')
    boutton_quitter.pack()
     
    fen_intro.mainloop()
    fen_intro.destroy()
    Voilà, merci si qqn peut m'aider.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    La méthode Entry.get() retourne un string. Donc ta condition repeat<nb_elements n'est jamais vrai, ce qui fait une boucle infini et bloque ton programme.

    La commande exec est à proscrire dans la plupart des cas, et est vraiment inutile ici. Tu peux utiliser l'argument command du Button associé à un lambda pour retrouver le bouton cliquer.

    Tu peux utiliser directement le pack() aux widgets dont tu n'as pas besoin, c'est généralement le cas pour les Label et les Button.

    J'ai remplacé le while par un for. c'est une habitude à prendre en python.

    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
     
    from Tkinter import *
     
    fen_intro=Tk()
     
    def onClick(nbr):
        print "click bouton"+str(nbr)
     
    def simulation():
        nb_elements=int(def_nb_elements.get())
        fen_intro.destroy()
        fen_simulation=Tk()
        for repeat in range(nb_elements):
            Button(fen_simulation, text="bouton"+str(repeat), command=lambda x=repeat: onClick(x)).pack()
     
    Label(fen_intro,text="Choisissez le nombre d'éléments à incorporer au modèle").pack()
     
    def_nb_elements=Entry(fen_intro)
    def_nb_elements.pack()
     
    Button(fen_intro,text='Valider',command=simulation).pack()
    Button(fen_intro,text='Quitter').pack()
     
    fen_intro.mainloop()

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Points : 34
    Points
    34
    Par défaut Merci
    Merci, ca fonctionne bien maintenant. C'est vrai, j'aurais du y penser que ça me renvoie un string. En revanche, je connais pas encore l'utilité de la commande lambda. Mais je vais regarder ça.

    Merci encore

Discussions similaires

  1. Problème pour l'ouverture d'une fenêtre tkinter
    Par Invité dans le forum Général Python
    Réponses: 9
    Dernier message: 11/04/2014, 12h44
  2. Problème de fenêtre modal qui ne stoppe pas le code en arrière plan
    Par Sebcaen dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 25/09/2006, 13h43
  3. Problème 2 fenêtres en stayontop
    Par smazaudi dans le forum Delphi
    Réponses: 1
    Dernier message: 22/08/2006, 14h59
  4. Problème de fenêtre qui ne se détruit pas
    Par Okydor dans le forum wxPython
    Réponses: 7
    Dernier message: 04/08/2006, 10h42
  5. PLusieurs fenêtre Tkinter
    Par peyro dans le forum Tkinter
    Réponses: 2
    Dernier message: 14/06/2006, 15h04

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