Bonjour , dans le cadre d'un mini projet d'ISN j'ai a faire un pendu et cela sans utiliser la poo mais en utilisant des fonctions (je sais utiliser la poo et d’ailleurs ça serais énormément plus pratique mais je me limite au consignes du prof)
Donc j'ai commencé ce que j'ai pu mais je n'arrive pas a agir sur les labels dans les fonctions appelés par un bouton... pourtant j'utilise bien global pour avoir accès aux objets en dehors de mes fonctions... voici des morceaux de code pour vous montrer le problème et l'erreur survenue.
ici le code principal du jeu dans le fichier "launcher_jeu__pendu":
ici une erreur d’accès sur une simple variable (fichier "fonctions_du_jeu") :
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 # -*- coding: utf-8 -*- import Tkinter from fonctions_du_jeu import * coups_restants=9 mot_a_trouver = choisir_mot() mot_cacher = ["_"]*len(mot_a_trouver) fenetre = Tkinter.Tk() label_coups_restants = Tkinter.Label(fenetre,text="coups restants : 9").grid(row=0,columnspan=2) canvas = Tkinter.Canvas(fenetre,bg='ivory',height=300,width=250).grid(row=1,columnspan=2) label_infos = Tkinter.Label(fenetre,text="Nouvelle partie , entrez une lettre").grid(row=2,columnspan=2) label_mot_cacher = Tkinter.Label(fenetre,text=mot_cacher).grid(row=3) entree_utilisateur = Tkinter.Entry(fenetre) entree_utilisateur.bind("<Return>",valider) entree_utilisateur.grid(row=4) bouton_rejouer = Tkinter.Button(fenetre, text="Rejouer",command=rejouer).grid(row=4,column=1) bouton_valider = Tkinter.Button(fenetre, text="Valider", command = valider).grid(row=5) bouton_quitter = Tkinter.Button(fenetre, text="Quitter", command=fenetre.quit).grid(row=5,column=1) fenetre.mainloop()
avec l'erreur quand j’appelle la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def valider(event=None): global coups_restants, canvas, mot_a_trouver, mot_cacher alphabet = ["abcdefghijklmnopqrsstuvwxyz"] if "".join(mot_cacher) != mot_a_trouver : print "blablabla..."
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python27\lib\lib-tk\Tkinter.py", line 1542, in __call__
return self.func(*args)
File "C:\Users\gaeta\Documents\python\jeu du pendu\fonctions_du_jeu.py", line 16, in valider
if "".join(mot_cacher) != mot_a_trouver :
NameError: global name 'mot_cacher' is not defined
ensuite ici tentative d’accès a un label pour le modifier :
et l'erreur quand j’appelle la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 def rejouer(): global mot_a_trouver, mot_cacher, coups_restants, label_mot_cacher coups_restants=9 mot_a_trouver = choisir_mot() mot_cacher = ["_"]*len(mot_a_trouver) label_mot_cacher.config(text=mot_cacher)
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files (x86)\Python27\lib\lib-tk\Tkinter.py", line 1542, in __call__
return self.func(*args)
File "C:\Users\gaeta\Documents\python\jeu du pendu\fonctions_du_jeu.py", line 76, in rejouer
label_mot_cacher.config(text=mot_cacher)
NameError: global name 'label_mot_cacher' is not defined
J'ai également essayé avec cette méthode en passant les arguments à l'appel de la fonction grâce à un lambda;
et la fonction appelé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 bouton_valider = Tkinter.Button(fenetre, text="Valider", command = lambda: valider(coups_restants,canvas,mot_cacher,mot_a_trouver,label_infos,label_coups_restants,entree_utilisateur)) bouton_valider.grid(row=5)
Et là il me dit que entree_utilisateur et label_infos est du type none...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def valider(coups_restants, canevas, mot_cacher, mot_a_trouver,label_infos,label_coups_restants, entree_utilisateur, event=None): alphabet = ["abcdefghijklmnopqrsstuvwxyz"] if "".join(mot_cacher) != mot_a_trouver : if coups_restants > 0: if len(entree_utilisateur.get()) == 1: if entree_utilisateur.get() in alphabet : if entree_utilisateur.get().upper() in mot_a_trouver : mot_cacher = placer_lettre(entree_utilisateur.get()) label_infos.config(text="Bravo !")
en espérant avoir un peut d'aide... merci !
Partager