Bonsoir,

Je suis en Terminale S et je souhaite créer une interface.
Dans mon programme, j'ouvre d'abord ma fenêtre principale. Ensuite, j'ouvre une deuxième fenêtre, appelée fenêtre verte qui affiche une image du nom de "poubelles.gif". Mon problème arrive après : je n'arrive pas à répéter l'opération pour ouvrir une nouvelle fenêtre (appelée fenêtre quoi) en cliquant sur la fenêtre verte. Je pense qu'il y a tout d'abord un problème dans ma fonction position_fenetreverte à la fin du programme ...

Voici mon programme :

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
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
#On importe Tkinter
from tkinter import*
 
#On crée une fenêtre Tkinter
mafenetre=Tk()
fenetreverte=Tk()
fenetrequoi=Tk()
 
#On charge l'image
photo=PhotoImage(file="image.gif")
 
 
#Création d'un widget Canvas (zone graphique)
Largeur=800
Hauteur=600
Canevas=Canvas(mafenetre, width=Largeur, height=Hauteur)
Canevas.pack()
 
#L'image est affichée dans le canevas
monimage=Canevas.create_image(0,0,anchor=NW,image=photo)
 
#On prépare le label qui affichera la position du clic
chaine=Label(mafenetre)
chaine.pack()
 
chaineverte=Label(fenetreverte)
chaineverte.pack()
#On crée les zones ovales et on les met en couleurs lors du survol de la souris
o1=Canevas.create_oval(0,15,400,280, width=0, activefill='green')
o2=Canevas.create_oval(420,110,800,390, width=0, activefill='red')
o3=Canevas.create_oval(5,350,560,600, width=0, activefill='blue')
 
#on crée un label (ligne de texte)
label1=Label(mafenetre, text = "Je m'appelle", fg='blue')
label1.pack()
 
#n crée un widget Entry (zone d'entrée de texte)
ma_zone_d_entree=Entry(mafenetre, bg='light sky blue', fg='maroon')
ma_zone_d_entree.pack()
 
#la fonction ci-dessous est appelée lors de l'action sur le bouton monbouton
def fonction_bienvenue():
    nom=ma_zone_d_entree.get()
    label2['text']="Amuse-toi bien " + nom + "!"
 
#On crée un bouton
monbouton=Button(mafenetre, text="Valider", command=fonction_bienvenue)
monbouton.pack()
 
#On crée un second label (texte vide pour le moment)
label2=Label(mafenetre, text="",fg='dark green')
label2.pack()
 
#On programme l'ouverture de la fenetre Verte
fenetresecondairedejaouverte=0
 
def fermerfenetreverte():
    global fenetresecondairedejaouverte
    fenetresecondairedejaouverte=0
    fenetreverte.destroy()
 
def ouverturefenetreverte():
    global fenetreverte, fenetresecondairedejaouverte
 
    fenetreverte = Toplevel()
 
    ## Ouverture du fichier
    imageverte = 'poubelles.gif'
    ## Remplace PhotoImage de Tkinter par celui de PIL
    photo = PhotoImage(file=imageverte)
 
    Canevas_fenetreverte=Canvas(fenetreverte, width=620, height=350)
    monimage=Canevas_fenetreverte.create_image(0,0,anchor=NW,image=photo)
    Canevas_fenetreverte.pack()
 
 
 
    fenetreverte.protocol("WM_DELETE_WINDOW",fermerfenetreverte)
 
    texte2=Label(fenetreverte, text="", fg='red')
    texte2.pack()
    bouton2 = Button(fenetreverte, text='FERMER',command=fermerfenetreverte)
    bouton2.pack()
    fenetreverte.mainloop()
 
#On programme l'ouverture de la fenetre quoi
fenetretroisiremedejaouverte=0
 
def fermerfenetrequoi():
    global fenetretroisiremedejaouverte
    fenetretroisiremedejaouverte=0
    fenetrequoi.destroy()
 
def ouverturefenetrequoi():
    global fenetrequoi, fenetretroisiremedejaouverte
 
    fenetrequoi = Toplevel()
 
    ## Ouverture du fichier
    imagequoi = 'quoi.gif'
    ## Remplace PhotoImage de Tkinter par celui de PIL
    photo = PhotoImage(file=imagequoi)
 
    Canevas_fenetrequoi=Canvas(fenetrequoi, width=620, height=350)
    monimage2=Canevas_fenetrequoi.create_image(0,0,anchor=NW,image=photo)
    Canevas_fenetrequoi.pack()
 
 
 
    fenetrequoi.protocol("WM_DELETE_WINDOW",fermerfenetrequoi)
 
    texte3=Label(fenetrequoi, text="", fg='red')
    texte3.pack()
    bouton3 = Button(fenetrequoi, text='FERMER',command=fermerfenetrequoi)
    bouton3.pack()
    fenetrequoi.mainloop()
 
 
#fonction appelée par le clic du bouton gauche de la souris
def position_pointeur(evenement):
    chaine['text']="Clic détecté en X="+str(evenement.x)+",Y"+str(evenement.y)
 
    if evenement.x>0 and evenement.x<400 and evenement.y>15 and evenement.y<280:
        ouverturefenetreverte()
    if evenement.x>420 and evenement.x<800 and evenement.y>110 and evenement.y<390:
        ouverturefenetrerouge()
    if evenement.x>5 and evenement.x<560 and evenement.y>350 and evenement.y<600:
        ouverturefenetrebleue()
 
#On écoute cette fois le bouton gauche de la souris
mafenetre.bind("<Button-1>", position_pointeur)
 
 
#fonction position sur la fenetre verte
def position_fenetreverte(evenement2):
    chaineverte['text']="Clic détecté en X="+str(evenement2.x)+",Y"+str(evenement2.y)
 
    if evenement2.x>0 and evenement2.x<600 and evenement2.y>0 and evenement2.y<350:
        ouverturefenetrequoi()
 
fenetreverte.bind("<Button-1>", position_fenetreverte)
 
 
 
 
 
 
#On démarre la boucle Tkinter qui s'interrompt quand on ferme la fenêtre
mafenetre.mainloop()

Merci d'avance pour votre aide,
Nonimamie