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 :

Execfile() et jeu du pendu


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Execfile() et jeu du pendu
    Bonjour,

    Je viens vous demandez votre aide car je bloque sur un exercice depuis 2 jours, malgré mes recherches sur de nombreux forums et de la doc je ne m'en sors pas.

    Voici mon code : http://dpaste.com/hold/844821/

    Le problème que je rencontre c'est le bouton "Start" qui ne fait pas ce qu'il est sensé faire (c'est à dire relancer une partie).

    Je sais que je dois utiliser la fonction execfile() pour ça (je n'ai pas le choix donc ce doit être possible avec).

    Le code tel quel déclenche une erreur à l’exécution de la fonction reset(), à cause de top.destroy()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _tkinter.TclError: can't invoke "destroy" command:  application has been destroyed
    En supprimant la ligne qui pose problème j'obtiens alors l'erreur ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RuntimeError: maximum recursion depth exceeded
    Je ne m'attend pas à ce qu'on me serve la solution sur un plateau mais si quelqu'un peut me mettre sur la piste... Car là je suis coincé et ne peux pas avancé tant que ce bouton ne fonctionnera pas correctement.

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Enlève les parenthèses de reset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Button(top, text='start', command=reset).pack(side=TOP)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ta réponse VinsS.

    En effet ça marche, mais seulement une fois. Le jeu se relance lorsque je clic sur le bouton "Start" mais lorsque je reclic dessus la fenêtre se ferme et j'obtiens la même erreur qu'avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _tkinter.TclError: can't invoke "destroy" command:  application has been destroyed
    Peux-tu m'expliquer pourquoi le fait d'avoir retiré les parenthèses a permit de relancer le jeu (au moins une fois :p) ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Du fait de la présence des parenthèses la fonction reset est appellée lors de l'instanciation du bouton, raison pour laquelle on ne met jamais ces parenthèses aux command et autres récepteurs de signaux.

    Pour ton erreur actuelle, peut-être est-ce dû au fait que tu fait un destroy() après un quit(). Connais pas trop Tkinter.


    Il n'empêche, détruire l'appli pour en relancer une nouvelle instance à partir d'elle-même est pour le moins saugrenu comme idée. Il serait plus simple de vider le canvas (clear() ?) et de recréer P.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci pour l'explication, en effet j'avais essayé de mettre par exemple :
    dans la fonction reset() et j'ai constaté que 'youpi!' s'affichait directement dans le terminal dès que je lançais l’exécution du script.

    Je vais regarder pour l'erreur avec le destroy() et je te tiens au courant.

    Merci encore, ça m'a déjà bien aidé, je ne savais même pas qu'il était possible d'appeler une fonction sans mettre de parenthèses.

    EDIT : J'ai essayé en supprimant destroy() de la fonction reset() mais du coup la fenêtre n'est pas détruite et une autre s'ouvre, lorsque j'essaie de commencer le jeu en appuyant sur une touche j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      File "./pendu.py", line 31, in valide
        else: R += devine[x]
    IndexError: string index out of range
    Et si je laisse destroy() et que je supprime quit() j'obtiens la même erreur cependant il n'y a pas d'autre fenêtre générée.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Si quelqu'un a une idée autrement qu'avec execfile() je vous écoute. Je suis bloqué depuis plusieurs jours, même si je ne fais pas comme demandé j'aimerais trouver une solution pour que cela marche.

    Merci d'avance.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,
    Ecrivez execfile('pendu.py', {})
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Ça à l'air de marcher !!

    Merci infiniment. J'ai cuisiné une petite fonction qui réinitialise tout et à la qui appelle execfile('pendu.py', {}) et ça marche.

    Peux-tu m'expliquer pourquoi cela fonctionne avec les {} ?

    Encore merci !!

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par MilkyMars Voir le message
    Peux-tu m'expliquer pourquoi cela fonctionne avec les {} ?
    Le {} fait tomber le truc en marche.
    Cà indique le problème mais ce n'est pas la solution.

    Pourquoi cela fonctionne? Peux tu expliquer comment il t'est possible d'utiliser une fonction sans avoir pris la précaution d'apprendre à s'en servir? Essaie de chercher un peu.

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

Discussions similaires

  1. Code en bourne shell du jeu Le "PENDU"
    Par piment dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 20/07/2007, 14h17
  2. Jeu Bonhomme pendu
    Par yinyann86 dans le forum Delphi
    Réponses: 11
    Dernier message: 14/11/2006, 17h03
  3. Le jeu du pendu.
    Par giggs dans le forum C
    Réponses: 5
    Dernier message: 31/10/2006, 13h40
  4. jeu du pendu
    Par krachik dans le forum Langage
    Réponses: 5
    Dernier message: 24/10/2006, 12h48
  5. Réponses: 4
    Dernier message: 24/03/2006, 13h54

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