Menu

Exercice 8.21 apprendre à programmer en python Gérard swinnen [Fermé]

Roman Follet - 6 mai 2016 à 14:29 - Dernière réponse :  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.



Afficher la suite 

3 réponses

Roman Follet - 6 mai 2016 à 15:51
0
Utile
2
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....
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!!
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.