Exercice 8.21 apprendre à programmer en python Gérard swinnen

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.

1 réponse

  1. 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
    1. 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
    2. @Roman FolletSalut,
      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