Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI
GUI Forum d'entraide sur les bibliothèques pour interfaces graphiques en Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/05/2010, 17h31   #1
tefacorp
Invité de passage
 
Inscription : mai 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 8
Points : 2
Points : 2
Par défaut Visibilité des variables

Bonjour à tous, je viens de fraichement créer un petit programme pour concevoir un jeu sous python et le module Tkinter. Mais voila, quand j'assemble mes deux premier prototypes, voila ce que la console m'affiche :

Code :
1
2
3
4
5
6
7
>>> Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:/Users/Maxime Helen/Desktop/Programme/Jeu_complet.py", line 89, in scenario
    joueur = saisir.get()
NameError: global name 'saisir' is not defined
Alors que quand j'isole le prototype d'où le problème vient, tout marche parfaitement !
Voici mon programme en entier :

Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
from Tkinter import *
from os import chdir
chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
# Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
# des fiches en répertoire courant
 
def Moyen_Orient () :
    print "sa marche"
 
def Afrique () :
    print "sa marche "
 
def Amerique_Nord () :
    print "sa marche "
 
def Amerique_Sud () :
    print "sa marche "
 
def Europe () :
    print "sa marche "
 
def Asie () :
    print "sa marche "
 
def Australie () :
    print "sa marche "
 
def MaisonEinstein () :
    print "sa marche "
 
 
######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
 
def carte_monde () :
 
    fenetre_carte_monde = Toplevel ()
    fenetre_fenetre_nvlpartie.destroy()
    fenetre_carte_monde.title ("carte du monde")
    fenetre_carte_monde.geometry("1600x755")
    fenetre_carte_monde.wm_state(newstate="zoomed")
    # Création de la nouvelle fenêtre décrivant le scénario
 
    cadre2 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
    imageCarteMonde = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\Carte monde.gif")
    image_id3 = cadre2.create_image(744,375,image = imageCarteMonde)
    # Création du canvas positionnant l'image d'einstein
 
    bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                              command =Moyen_Orient, bg = "green" )
    bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                              command = Afrique, bg = "blue" )
    bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                              command = Amerique_Nord, bg = "orange" )
    bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                              command = Amerique_Sud, bg = "red" )
    bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                              command = Europe, bg = "white" )
    bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                              command = Asie, bg = "pink" )
    bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                              command = Australie, bg = "Yellow" )
    bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                              command = MaisonEinstein, bg = "magenta" )
    # Création des boutons permettant la navigation dans le monde
 
    texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
    texte1.insert(AtEnd(),content)
    texte1.config(wrap=WORD)
    # Création du texte décrivant le tutorial de la carte du monde
 
    bouton_MoyenOrient.place(x = 850, y = 230)
    bouton_Afrique.place(x = 750, y = 290)
    bouton_Amérique_Nord.place(x = 295, y = 150)
    bouton_Amérique_Sud.place(x = 400, y = 410)
    bouton_Europe.place(x = 750, y = 135)
    bouton_Asie.place(x = 1050, y = 160)
    bouton_Australie.place(x = 1225, y = 475)
    bouton_MaisonEinstein.place(x = 744, y = 700)
    texte1.place(x=0,y=250)
    cadre2.pack()
    # Placement des widgets
 
######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
 
 
 
def scenario ():
    joueur = saisir.get()
    # Enregistrement du nom du joueur
    fenetre_nouvelle_partie = destroy()
    fenetre_scénario = Toplevel ()
    fenetre_scénario.geometry("1400x1000")
    fenetre_scénario.title("scénario")
    # Création de la nouvelle fenêtre décrivant le scénario
 
    FichierSauvegarde = open(joueur,'a')
    FichierSauvegarde.close()
    # Crée un nouveau fichier de sauvegarde du nom saisie.
 
    lb = Label ( fenetre_scénario, text = "Bienvenue", bg="blue")
    lb1 = Label ( fenetre_scénario, text = joueur, bg="blue")
    # Label de bienvenue avec le nom du joueur
 
    cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
    imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
    image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
    # Création du canvas positionnant l'image d'einstein
 
    texte = Text(fenetre_scénario, width = 100, height = 100)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
    texte.insert(AtEnd(),content)
    # Création du texte mettant en scène le scénario
 
    bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command =carte_monde, bg = "red" )
    # Création du bouton pour lancer la partie
 
    lb.place(x=100,y=500)
    lb1.place(x=200,y=500)
    bouton_carte_monde.place(x=1200,y=500)
    cadre1.pack()
    texte.pack()
    # Placement des widgets
 
 
def nouvelle_partie () :
    fenetredebut.destroy()
    fenetre_nvlpartie = Toplevel ()
    fenetre_nvlpartie.title("Nouvelle partie")
    # Création d'une nouvelle fenêtre pour créer une nouvelle partie
 
    txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
    saisir = StringVar()
    entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 20)
    txt1.grid(row=1, sticky = E)
    entr1.grid(row =1, column =2)
    # Crée l'espace de saisie du nouveau fichier
 
    bouton_OK=Button(fenetre_nvlpartie, text="OK", command = scenario )
    bouton_OK.grid(row =2,column = 2)
    # Bouton marquant la fin de la saisie et appel la fonction qui va créer
    # le fichier qui aura pour nom l'entrée saisie : " saisie ".
 
 
 
######################################## FENETRE DE DEBUT ###########################################################
 
 
# Création de la fenêtre principale
fenetredebut=Tk()
fenetredebut.geometry("900x500")
fenetredebut.title("Mon jeu")
 
# Titre du jeu
titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
 
 
### canvas avec l'image du jeu  
cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
image_id = cadre.create_image(200,260,image = imageeinstein)
 
 
# Création des boutons de commencement du jeu
bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie#)
bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie")#, command=supprimer_partie)  
bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
 
 
### Mise en page des boutons et canvas de l'image
bouton_nouvelle_partie.grid(row =2,sticky =E )
bouton_charger_partie.grid(row =3, sticky =E)
bouton_supprimmer_partie.grid(row =4, sticky =E)
bouton_quitter_jeux.grid(row =5, sticky =E)
titrejeu.grid(row =1, column = 2)
cadre.grid(row=2,column = 2,rowspan =4)
Je ne comprends pas... Surtout que j'ai annoncer 'saisir' comme un textvariable.
Merci de m'aider ! Je vous serai très reconnaissant de me sortir de ce guépier, surtout que je dois soutenir ce programme devant un jury la semaine prochaine !
tefacorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2010, 21h35   #2
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 617
Points : 3 730
Points : 3 730
Bonjour tefacorp,

Désolé de le dire (Ce n'est pas un reproche, j'ai sans doute fais pire/Tkinter c'est un bon début, persévère) mais il y as du travail.
C'est la structure de ton code et la visibilité des variables/objet ton problème.
Si tu déplace saisir ici :
Code :
1
2
3
4
5
# Creation de la fenêtre principale
fenetredebut=Tk()
fenetredebut.geometry("900x500")
fenetredebut.title("Mon jeu")
saisir = StringVar()
Tu vas voir que tu as d'autres problèmes.

Par exemple le fenetre_nouvelle_partie = destroy() j'avais jamais vus.
fenetre_nouvelle_partie.destroy() par contre cela me parle.

Même si tu corrige cela tu arrive sur un global name 'fenetre_nouvelle_partie' is not defined : sympa.

C'est la structure qui est à revoir (et la portée des objets/variables).

De plus :
Code :
1
2
3
4
5
fenetredebut=Tk()
...
def nouvelle_partie () :
    fenetredebut.destroy()
    fenetre_nvlpartie = Toplevel ()
Détruire ta fenêtre principale (Tk, il ne dois y en avoir qu'une) et lui créer un Toplevel ?

Etc...

Regarde ce code (Pas trop mal pour un début) par exemple.

Avant de te lancer regarde ceci à partir d'ici mais pour ta structure ici.

Bon code

@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 13h58   #3
tefacorp
Invité de passage
 
Inscription : mai 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 8
Points : 2
Points : 2
Merci PauseKawa de me répondre aussi rapidement.
En effet, je me suis très vite rendu compte de mes lacunes... C'est pourquoi j'ai potasser un peu et régler ce problème. J'ai compris qu'il fallait returné des valeur après les fonctions pour me permettre de les réutiliser. Mais voila, j'ai un autre problème un peu plus inquiétant. Mon programme marche enfin comme je le voulais sauf que dans la fonction carte_monde () tout se lance parfaitement bien sauf l'image associé au canvas : Carte monde.gif . En effet, il y apparait tout les boutons et le texte sauf la photo associé au canvas. J'ai seulement le cadre noire délimitant le canvas. Alors qu'une nouvelle fois, quand j'isole la fonction exactement comme elle est écrite ici, l'image apparait bien... Merci encore une fois de m'aider

Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
from Tkinter import *
from os import chdir
chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
# Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
# des fiches en répertoire courant
 
def Moyen_Orient () :
 
    return 
 
def Afrique () :
    print "sa marche "
 
def Amerique_Nord () :
    print "sa marche "
 
def Amerique_Sud () :
    print "sa marche "
 
def Europe () :
    print "sa marche "
 
def Asie () :
    print "sa marche "
 
def Australie () :
    print "sa marche "
 
def MaisonEinstein () :
    print "sa marche "
 
 
######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
 
def carte_monde (fenetre_scénario) :
    fenetre_scénario.destroy()
    fenetre_carte_monde = Tk()
    fenetre_carte_monde.title ("carte du monde")
    fenetre_carte_monde.geometry("1500x800")
 
 
    # Création de la nouvelle fenêtre décrivant le scénario
    cadre4 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
    imageCarteMonde = PhotoImage(file="C:\Users\Maxime   Helen\Desktop\Programme\Carte monde.gif")
    image_id3 = cadre4.create_image(744,375,image = imageCarteMonde)
 
    # Création du canvas positionnant l'image d'einstein
 
    bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                              command = lambda : Moyen_Orient(fenetre_carte_monde), bg = "green" )
    bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                              command = Afrique, bg = "blue" )
    bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                              command = Amerique_Nord, bg = "orange" )
    bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                              command = Amerique_Sud, bg = "red" )
    bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                              command = Europe, bg = "white" )
    bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                              command = Asie, bg = "pink" )
    bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                              command = Australie, bg = "Yellow" )
    bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                              command = MaisonEinstein, bg = "magenta" )
    # Création des boutons permettant la navigation dans le monde
 
    texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
    texte1.insert(AtEnd(),content)
    texte1.config(wrap=WORD)
    # Création du texte décrivant le tutorial de la carte du monde
 
    bouton_MoyenOrient.place(x = 850, y = 230)
    bouton_Afrique.place(x = 750, y = 290)
    bouton_Amérique_Nord.place(x = 295, y = 150)
    bouton_Amérique_Sud.place(x = 400, y = 410)
    bouton_Europe.place(x = 750, y = 135)
    bouton_Asie.place(x = 1050, y = 160)
    bouton_Australie.place(x = 1225, y = 475)
    bouton_MaisonEinstein.place(x = 744, y = 700)
    texte1.place(x=0,y=250)
    cadre4.pack()
    # Placement des widgets
    return fenetre_carte_monde, 
 
######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
 
 
 
def scenario (saisir,fenetre_nvlpartie):
    joueur = saisir
    # Enregistrement du nom du joueur
    fenetre_nvlpartie.destroy()
    fenetre_scénario = Tk()
    fenetre_scénario.geometry("1400x1000")
    fenetre_scénario.title("scénario")
    # Création de la nouvelle fenêtre décrivant le scénario
 
    FichierSauvegarde = open(joueur,'a')
    FichierSauvegarde.close()
    # Crée un nouveau fichier de sauvegarde du nom saisie.
 
    lb = Label ( fenetre_scénario, text = "Bienvenue", bg="blue")
    lb1 = Label ( fenetre_scénario, text = joueur, bg="blue")
    # Label de bienvenue avec le nom du joueur
 
    cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
    imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
    image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
    # Création du canvas positionnant l'image d'einstein
 
    texte = Text(fenetre_scénario, width = 100, height = 100)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
    texte.insert(AtEnd(),content)
    # Création du texte mettant en scène le scénario
 
    bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command = lambda : carte_monde (fenetre_scénario), bg = "red" )
    # Création du bouton pour lancer la partie
 
    lb.place(x=100,y=500)
    lb1.place(x=200,y=500)
    bouton_carte_monde.place(x=1200,y=500)
    cadre1.pack()
    texte.pack()
    # Placement des widgets
    fenetre_scénario.mainloop()
    return fenetre_scénario, imageCarteMonde
 
def nouvelle_partie () :
    fenetredebut.destroy()
    fenetre_nvlpartie = Tk()
    fenetre_nvlpartie.title("Nouvelle partie")
    fenetre_nvlpartie.wm_state(newstate="zoomed")
    # Création d'une nouvelle fenêtre pour créer une nouvelle partie
 
    txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
    saisir = StringVar()
    entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 30)
    saisir.set("Entrez votre nom ici")
    txt1.grid(row=1, sticky = E)
    entr1.grid(row =1, column =2)
    # Crée l'espace de saisie du nouveau fichier
 
    bouton_OK=Button(fenetre_nvlpartie, text="OK", command = lambda : scenario(saisir.get(),fenetre_nvlpartie))
    bouton_OK.grid(row =2,column = 2)
    # Bouton marquant la fin de la saisie et appel la fonction qui va créer
    # le fichier qui aura pour nom l'entrée saisie : " saisir ".
    return saisir, fenetre_nvlpartie
 
 
######################################## FENETRE DE DEBUT ###########################################################
 
 
# Création de la fenêtre principale
fenetredebut=Tk()
fenetredebut.geometry("900x500")
fenetredebut.title("Mon jeu")
 
 
# Titre du jeu
titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
 
 
### canvas avec l'image du jeu  
cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
image_id = cadre.create_image(200,260,image = imageeinstein)
 
 
# Création des boutons de commencement du jeu
bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie#)
bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie")#, command=supprimer_partie)  
bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
 
 
### Mise en page des boutons et canvas de l'image
bouton_nouvelle_partie.grid(row =2,sticky =E )
bouton_charger_partie.grid(row =3, sticky =E)
bouton_supprimmer_partie.grid(row =4, sticky =E)
bouton_quitter_jeux.grid(row =5, sticky =E)
titrejeu.grid(row =1, column = 2)
cadre.grid(row=2,column = 2,rowspan =4)
 
fenetredebut.mainloop ()
Je précise que la console de python ne remarque aucune erreur....
tefacorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 19h12   #4
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 617
Points : 3 730
Points : 3 730
Bonjour,

Tu as deux fenêtres Tk, Photoimage n'aime pas cela.
Regarde du coté de Toplevel.

@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 19h51   #5
tefacorp
Invité de passage
 
Inscription : mai 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 8
Points : 2
Points : 2
Tout d'abord encore merci pour l'aide apporter, comme tu l'as si bien dit : je débute ! Néanmoins je ne comprends pas ce que tu veux dire : dans ma fonction carte_monde () je n'ai qu'une commande Tk() appelée ! -> fenetre_carte_monde = Tk(). Et j'ai beau remplacer Toplevel () par Tk() le problème persiste : canvas noir. J'ai sans doute pas très bien compris ce que tu veux dire, peux-tu préciser ?
tefacorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 20h40   #6
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 617
Points : 3 730
Points : 3 730
Bonsoir,

Code :
1
2
3
4
5
6
7
def nouvelle_partie () :
    fenetredebut.destroy() # Tu fais un destroy sur ta fenetre principale... 
    fenetre_nvlpartie = Tk() Pour faire une nouvelle fenêtre Tk...
....
# Création de la fenêtre principale
fenetredebut=Tk()
fenetredebut.mainloop () # Ta fenetre Tk principale.
Une seule instance Tk svp. Regarde les liens.

@+
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2010, 12h36   #7
tefacorp
Invité de passage
 
Inscription : mai 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 8
Points : 2
Points : 2
RAAAAA j'ai enfin compris mon erreur ! Merci pour ta patience, PauseKawa ! Voici mon programme qui fonctionne parfaitement :



Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
from os import chdir, listdir, remove
chdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
# Importe fonctions de gestions des fichiers et met le dossier de sauvegarde des
# des fiches en répertoire courant.
 
###### (
def Moyen_Orient () :
 
    return 
 
def Afrique () :
    print "sa marche "
 
def Amerique_Nord () :
    print "sa marche "
 
def Amerique_Sud () :
    print "sa marche "
 
def Europe () :
    print "sa marche "
 
def Asie () :
    print "sa marche "
 
def Australie () :
    print "sa marche "
 
def MaisonEinstein () :
    print "sa marche "
########## ) Suite pour P3
 
######################################## FENETRE DE LA CARTE DU CONTINENT ###########################################################
 
def carte_monde (fenetre_scénario) :
 
 
    fenetre_carte_monde = Toplevel()
    fenetre_scénario.destroy()
    fenetre_carte_monde.title ("carte du monde")
    fenetre_carte_monde.geometry("1500x800")
 
 
    # Création de la nouvelle fenêtre décrivant le scénario
    cadre4 = Canvas(fenetre_carte_monde,width=1488,height=755,bg="black")
    imageCarteMonde = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\Carte monde.gif")
    image_id3 = cadre4.create_image(744,375,image = imageCarteMonde)
 
    # Création du canvas positionnant l'image d'einstein
 
    bouton_MoyenOrient=Button(fenetre_carte_monde, text="Moyen Orient",\
                              command = lambda : Moyen_Orient(fenetre_carte_monde), bg = "green" )
    bouton_Afrique=Button(fenetre_carte_monde, text="Afrique",\
                              command = Afrique, bg = "blue" )
    bouton_Amérique_Nord=Button(fenetre_carte_monde, text="Amérique du Nord",\
                              command = Amerique_Nord, bg = "orange" )
    bouton_Amérique_Sud=Button(fenetre_carte_monde, text="Amérique du Sud",\
                              command = Amerique_Sud, bg = "red" )
    bouton_Europe=Button(fenetre_carte_monde, text="Europe",\
                              command = Europe, bg = "white" )
    bouton_Asie=Button(fenetre_carte_monde, text="Asie",\
                              command = Asie, bg = "pink" )
    bouton_Australie=Button(fenetre_carte_monde, text="Australie",\
                              command = Australie, bg = "Yellow" )
    bouton_MaisonEinstein=Button(fenetre_carte_monde, text="Maison d'Einstein",\
                              command = MaisonEinstein, bg = "magenta" )
    # Création des boutons permettant la navigation dans le monde
 
    texte1 = Text(fenetre_carte_monde, width = 30, height = 20)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\Tutorial.txt",'r').read() 
    texte1.insert(AtEnd(),content)
    texte1.config(wrap=WORD)
    # Création du texte décrivant le tutorial de la carte du monde
 
    bouton_MoyenOrient.place(x = 850, y = 230)
    bouton_Afrique.place(x = 750, y = 290)
    bouton_Amérique_Nord.place(x = 295, y = 150)
    bouton_Amérique_Sud.place(x = 400, y = 410)
    bouton_Europe.place(x = 750, y = 135)
    bouton_Asie.place(x = 1050, y = 160)
    bouton_Australie.place(x = 1225, y = 475)
    bouton_MaisonEinstein.place(x = 744, y = 700)
    texte1.place(x=0,y=250)
    cadre4.pack()
    # Placement des widgets
    fenetre_carte_monde.mainloop()
    return fenetre_carte_monde
 
######################################## FENETRE DE NOUVELLE PARTIE ###########################################################
 
 
 
def scenario (saisir,fenetre_nvlpartie):
    joueur = saisir
    # Enregistrement du nom du joueur
    fenetre_scénario = Toplevel()
    fenetre_nvlpartie.destroy()
    fenetre_scénario.geometry("1400x1000")
    fenetre_scénario.title("scénario")
    # Création de la nouvelle fenêtre décrivant le scénario
 
    FichierSauvegarde = open(joueur,'a')
    FichierSauvegarde.close()
    # Crée un nouveau fichier de sauvegarde du nom saisie.
 
    lb = Label ( fenetre_scénario, text = "Bienvenue")
    lb1 = Label ( fenetre_scénario, text = joueur)
    # Label de bienvenue avec le nom du joueur
 
    cadre1 = Canvas(fenetre_scénario,width=200,height=200,bg="white")
    imageeinstein2 = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein2.gif")
    image_id2 = cadre1.create_image(100,100,image = imageeinstein2)
    # Création du canvas positionnant l'image d'einstein
 
    texte = Text(fenetre_scénario, width = 100, height = 100)
    content = open("C:\Users\Maxime Helen\Desktop\Programme\scénario.txt",'r').read() 
    texte.insert(AtEnd(),content)
    # Création du texte mettant en scène le scénario
 
    bouton_carte_monde=Button(fenetre_scénario, text="Lancer la partie !", command = lambda : carte_monde (fenetre_scénario), bg = "red" )
    # Création du bouton pour lancer la partie
 
    lb.place(x=100,y=500)
    lb1.place(x=200,y=500)
    bouton_carte_monde.place(x=1200,y=500)
    cadre1.pack()
    texte.pack()
    # Placement des widgets
    fenetre_scénario.mainloop()
    return fenetre_scénario
 
def nouvelle_partie () :
    fenetre_nvlpartie = Toplevel()
    #
    fenetre_nvlpartie.title("Nouvelle partie")
    fenetre_nvlpartie.wm_state(newstate="zoomed")
    # Création d'une nouvelle fenêtre pour créer une nouvelle partie
 
    txt1 = Label(fenetre_nvlpartie, text ='Nom du nouveau joueur :')
    saisir = StringVar()
    entr1 = Entry(fenetre_nvlpartie,textvariable = saisir, width = 40)
    saisir.set("Entrez votre nom ici")
    txt1.grid(row=1, sticky = E)
    entr1.grid(row =1, column =2)
    # Crée l'espace de saisie du nouveau fichier
 
    bouton_OK=Button(fenetre_nvlpartie, text="OK", command = lambda : scenario(saisir.get(),fenetre_nvlpartie))
    bouton_OK.grid(row =2,column = 2)
    # Bouton marquant la fin de la saisie et appel la fonction qui va créer
    # le fichier qui aura pour nom l'entrée saisie : " saisir ".
    fenetre_nvlpartie.mainloop()
    return saisir, fenetre_nvlpartie
 
 
############################################ FENETRE DE SUPRESSION DE PARTIES SAUVEGARDEES ################################################################################
 
 
def supprimer_partie (fenetredebut) :
 
 
    fenetre_supression = Toplevel()
    fenetre_supression.geometry("500x500")
    fenetre_supression.title("Supprimer fichier sauvegarde")
    # Création de la fenêtre principale
 
    list_sav = listdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
    # forme une liste de tout les fichiers du répertoire qui stocke les fichiers de sauvegardes
 
    nombre_fichier = len(list_sav)
    # Calcule le nombre de fichier qu'il y a dans le répertoire
 
    if nombre_fichier==0 :
            txt4 = Label (fenetre_supression, text = "aucune partie sauvegardée à supprimer")
            txt4.place(x=200,y=250)
    #S'il n'y a aucun fichier dans le repertoire, il le fait remarquer.
 
    for i in range (nombre_fichier) :
        nom_fichier = list_sav[i]
        txt3 = Label(fenetre_supression, text = "nom du joueur :")
        txt2 = Label(fenetre_supression, text = nom_fichier)
        bouton_supr = Button(fenetre_supression, text="Supprimer ce fichier, cliquez ici", command = lambda : remove(nom_fichier))
        txt3.place(x=10, y=50*i)
        txt2.place(x=100,y=50*i)
        bouton_supr.place(x=300,y=50*i)
        list_sav1 = listdir("C:\Users\Maxime Helen\Desktop\Programme\Fichier sauvegardes")
        nombre_fichier1 = len(list_sav)
        if nombre_fichier1==0 :
            txt4 = Label (fenetre_supression, text = "aucune partie sauvegardée à supprimer")
            txt4.place(x=200,y=250)
    # Création d'un boucle qui crée des labels des noms des fichiers et des boutons qui permet de commander leurs suppression.
    #La boucle permet de crée un bouton et un label par fichier trouver dans le répertoire sotckant les sauvegardes.
    #S'il n'existe plus aucun fichier dans le repertoire, il le fait remarquer.
    fenetre_supression.mainloop ()
 
 
    return
 
 
 
######################################## FENETRE DE DEBUT ###########################################################
 
 
# Création de la fenêtre principale
fenetredebut=Tk()
fenetredebut.geometry("900x500")
fenetredebut.title("Mon jeu")
 
 
# Titre du jeu
titrejeu = Label(fenetredebut, text="Qui se sent capable de rivaliser avec Einstein ?")
 
 
### canvas avec l'image du jeu  
cadre = Canvas(fenetredebut,width=400,height=521,bg="white")
imageeinstein = PhotoImage(file="C:\Users\Maxime Helen\Desktop\Programme\einstein1.gif")
image_id = cadre.create_image(200,260,image = imageeinstein)
 
 
# Création des boutons de commencement du jeu
bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie; Fonctionnalité de P5
bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)) 
bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
 
 
### Mise en page des boutons et canvas de l'image
bouton_nouvelle_partie.grid(row =2,sticky =E )
bouton_charger_partie.grid(row =3, sticky =E)
bouton_supprimmer_partie.grid(row =4, sticky =E)
bouton_quitter_jeux.grid(row =5, sticky =E)
titrejeu.grid(row =1, column = 2)
cadre.grid(row=2,column = 2,rowspan =4)
 
 
fenetredebut.mainloop ()
Bien à vous, TEFACORP
tefacorp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2010, 19h59   #8
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
Détails du profil
Informations personnelles :
Nom : Homme Patrice BLANGARIN
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Technicien Help Desk, maintenance, réseau, système et +
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2006
Messages : 2 617
Points : 3 730
Points : 3 730
Bonjour,

Quelques notes pour faire plus propre :

Un Toplevel n'as pas besoin de mainloop.

Si tu n'as pas besoin de le nommer par la suite pas besoin de donner un nom a tes Widgets :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
# Création des boutons de commencement du jeu
bouton_nouvelle_partie=Button(fenetredebut, text="Débuter une nouvelle partie",command=nouvelle_partie) 
bouton_charger_partie=Button(fenetredebut, text="Charger partie")#,command=charger_partie; Fonctionnalité de P5
bouton_supprimmer_partie=Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)) 
bouton_quitter_jeux=Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy) 
 
 
### Mise en page des boutons et canvas de l'image
bouton_nouvelle_partie.grid(row =2,sticky =E )
bouton_charger_partie.grid(row =3, sticky =E)
bouton_supprimmer_partie.grid(row =4, sticky =E)
bouton_quitter_jeux.grid(row =5, sticky =E)
Deviens :
Code :
1
2
3
4
5
# Création des boutons de commencement du jeu
Button(fenetredebut, text="Débuter une nouvelle partie", command=nouvelle_partie).grid(row=2, sticky=E)
Button(fenetredebut, text="Charger partie", command=...).grid(row=3, sticky=E)
Button(fenetredebut, text="Supprimer partie", command = lambda : supprimer_partie(fenetredebut)).grid(row=4, sticky=E)
Button(fenetredebut, text="Quitter le jeu", command=fenetredebut.destroy).grid(row=5, sticky=E)
Pourquoi le return à la fin de supprimer_partie alors que tu ne retourne rien ? Je le vois souvent dans les codes mais je ne m'en explique pas l'utilité.
Soit tu as une fonction de type
Code :
1
2
3
def unefonc(a):
    b=a*3
    return b
ou tu as besoin de b
Soit tu a une procédure de type :
Code :
1
2
def uneproc():
    root.destroy()
Et la pas la peine de mettre return. Cela retourneras toujours None.

Mais je vois que tu avance. Pense a regarder le chapitre 13 que je t'ai conseiller dés que tu te le sentiras. Cela te permettras de faire quelque chose de bien plus propre.

Bon code.
__________________
Merci d'utiliser le forum pour les questions techniques.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h37.


 
 
 
 
Partenaires

Hébergement Web