Exercice 8.21 apprendre à programmer en python Gérard swinnen

Fermé
Roman Follet - 6 mai 2016 à 14:29
 PAncho - 22 mai 2016 à 16:35
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
6 mai 2016 à 15:51
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
6 mai 2016 à 16:10
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
22 mai 2016 à 16:35
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