Exercice 8.21 apprendre à programmer en python Gérard swinnen

Roman Follet -  
 PAncho -
Bonjour,

Je bloque sur un exercice du livre de Gérard swinnen. Rapidement,l'exercice dit ceci/ J'ai 4 cercles colorés qui représentent des feux de circulation: 2 sont initialement vert et deux rouges.lors ce qu'on actionne un bouton, les deux verts passent au rouge et les deux rouges passent au vert.Voilà ou j'en suis:



from tkinter import *

def change_c():





# initialisation des couleurs pour les 4 feux

couleur=['green','red']

# Création de la route et du passage piéton

fen = Tk()
can=Canvas(fen,bg='white',height=310,width=300)
can.pack(side=TOP)
can.create_rectangle(100,5,200,305,fill='grey')
can.create_rectangle(100,105,110,205,fill='yellow')
can.create_rectangle(120,105,130,205,fill='yellow')
can.create_rectangle(140,105,150,205,fill='yellow')
can.create_rectangle(160,105,170,205,fill='yellow')
can.create_rectangle(180,105,190,205,fill='yellow')

# Création des 4 feux de circulation

can.create_oval(70,80,90,100,fill=couleur[0])
can.create_oval(210,210,230,230,fill=couleur[0])

can.create_oval(215,85,225,95,fill=couleur[1])
can.create_oval(75,215,85,225,fill=couleur[1])

# création du bouton

Button(fen,text='Changer',command=change_c).pack(side=BOTTOM)

fen.mainloop()




Je ne sais pas comment coder la fonction pour que quand on exécute le bouton, les deux feux verts passent au rouge et vice versa.Si vous pouvez me mettre sur le bon chemin (syntaxe, méthode...), je suis preneur,)...

Merci.



A voir également:

1 réponse

Roman Follet
 
J'en suis maintenant là:



from tkinter import *

def change_c():
global couleur
if couleur[0]=='green':
couleur[0]='red'
couleur[1]='green'
if couleur[0]=='red':
couleur[0]='green'
couleur[1]='red'
can.itemconfigure(oval1,fill=couleur[0])
can.itemconfigure(oval2,fill=couleur[0])
can.itemconfigure(oval3,fill=couleur[1])
can.itemconfigure(oval4,fill=couleur[1])

couleur=['green','red']

fen = Tk()
can=Canvas(fen,bg='white',height=310,width=300)
can.pack(side=TOP)
can.create_rectangle(100,5,200,305,fill='grey')

can.create_rectangle(100,105,110,205,fill='yellow')
can.create_rectangle(120,105,130,205,fill='yellow')
can.create_rectangle(140,105,150,205,fill='yellow')
can.create_rectangle(160,105,170,205,fill='yellow')
can.create_rectangle(180,105,190,205,fill='yellow')


oval1 = can.create_oval(70,80,90,100,fill=couleur[0])
oval2 = can.create_oval(210,210,230,230,fill=couleur[0])

oval3 = can.create_oval(215,85,225,95,fill=couleur[1])
oval4 = can.create_oval(75,215,85,225,fill=couleur[1])

Button(fen,text='Changer',command=change_c).pack(side=BOTTOM)

fen.mainloop()



Mais le changement de couleur ne s'effectue pas....
0
Roman Follet
 
J'ai trouvé une fonction qui fonctionne:



from tkinter import *

def change_c():
global couleur,i
if i%2==0:
can.itemconfigure(oval1,fill=couleur[1])
can.itemconfigure(oval2,fill=couleur[1])
can.itemconfigure(oval3,fill=couleur[0])
can.itemconfigure(oval4,fill=couleur[0])
if i%2!=0:
can.itemconfigure(oval1,fill=couleur[0])
can.itemconfigure(oval2,fill=couleur[0])
can.itemconfigure(oval3,fill=couleur[1])
can.itemconfigure(oval4,fill=couleur[1])
i +=1

couleur=['green','red']
i=0

fen = Tk()
can=Canvas(fen,bg='white',height=310,width=300)
can.pack(side=TOP)
can.create_rectangle(100,5,200,305,fill='grey')

can.create_rectangle(100,105,110,205,fill='yellow')
can.create_rectangle(120,105,130,205,fill='yellow')
can.create_rectangle(140,105,150,205,fill='yellow')
can.create_rectangle(160,105,170,205,fill='yellow')
can.create_rectangle(180,105,190,205,fill='yellow')


oval1 = can.create_oval(70,80,90,100,fill=couleur[0])
oval2 = can.create_oval(210,210,230,230,fill=couleur[0])

oval3 = can.create_oval(215,85,225,95,fill=couleur[1])
oval4 = can.create_oval(75,215,85,225,fill=couleur[1])

Button(fen,text='Changer',command=change_c).pack(side=BOTTOM)

fen.mainloop()



Si quelqu'un aurait une modification plus simple à apporter, je suis toujours preneur!!
0
PAncho > Roman Follet
 
Salut,
Je cherchais la solution d'un exercice suivant.


pour les feux, voici mon code

QUOTE

from tkinter import*

def popo():
k=0
while 150+25*k<330:
can.create_rectangle(150+25*k,100,170+25*k,200,fill='white')
k=k+1

def pupu():
global co1,co2
i=0
while i<4:
if i%2==0:
can.create_oval(coordo[i][0]-10,coordo[i][1]-10,coordo[i][0]+10,coordo[i][1]+10,fill=co1)
else:
can.create_oval(coordo[i][0]-10,coordo[i][1]-10,coordo[i][0]+10,coordo[i][1]+10,fill=co2)
i=i+1

def changer():
global co1,co2
x=co1
co1 =x
co1=co2
co2=x
pupu()

coordo=[[140,90],[360,90],[360,210],[140,210]]
co1='red'
co2='green'

fen=Tk()
fen.title('passage piétons')
can=Canvas(fen,bg='white', width=500,height=300)
can.create_rectangle(150,0,350,300,fill='grey')
popo()
pupu()
can.pack()

b1=Button(fen,text='changer',command=changer)
b1.pack(side=BOTTOM)
fen.mainloop()

UNQUOTE


on doit pouvoir faire mieux sur les couleurs dans le sous programme pupu()

Bon courage.
0