|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Étudiant Inscription : août 2012 Messages : 12 ![]() |
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 :
_tkinter.TclError: can't invoke "destroy" command: application has been destroyed Code :
RuntimeError: maximum recursion depth exceeded Merci d'avance |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 939 ![]() |
Enlève les parenthèses de reset
Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Étudiant Inscription : août 2012 Messages : 12 ![]() |
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 :
_tkinter.TclError: can't invoke "destroy" command: application has been destroyed |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : octobre 2008 Messages : 939 ![]() |
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. |
|
|
00
|
|
|
#5 | ||
|
Invité régulier
![]() Étudiant Inscription : août 2012 Messages : 12 ![]() |
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 :
|
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Étudiant Inscription : août 2012 Messages : 12 ![]() |
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. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Salut,
Ecrivez execfile('pendu.py', {}) - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Étudiant Inscription : août 2012 Messages : 12 ![]() |
Ç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 !! |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
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 |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com