Changement des propriétés d'un objet

nikko76600 Messages postés 19 Date d'inscription lundi 25 décembre 2006 Statut Membre Dernière intervention 20 avril 2010 - 25 janv. 2010 à 10:09
nikko76600 Messages postés 19 Date d'inscription lundi 25 décembre 2006 Statut Membre Dernière intervention 20 avril 2010 - 27 janv. 2010 à 23:57
Bonjour a tous et a toutes,

Je suis débutant dans la programmation en python (j'ai commencé il y a 3 jours) et je pose ma première question ici (qui ne sera sans aucun doute pas la dernière...)

J'ai un script qui utilise Tkinter pour afficher une petite animation, a l'aide de la récursivité d'une fonction (ca ce dit "récursivité d'une fonction ?"). Voici le code :

================================================
# -*- coding: Latin-1 -*-
from Tkinter import *

def move():
global x, y, dx, dy
x, y = x+dx, y+dy
if x >180:
x, dx, dy = 180, 0, 5
if y >180:
y, dx, dy = 180, -5, 0
if x <20:
x, dx, dy = 20, 0, -5
if y <20:
y, dx, dy = 20, 5, 0
can.coords(balle, x-10, y-10, x+10, y+10)
if flag==1:
fenetre.after(30,move)

def start():
global flag
if flag==0:
flag=1
move()

def stop():
global flag
flag=0

x, y = 20, 20
flag = 0
dx, dy = 5, 0

fenetre = Tk()
fenetre.title("exo d'anim ac Tkinter")

can = Canvas(fenetre, width=200, height=200, bg='white', bd=1, relief=GROOVE)
can.pack(side=LEFT)
balle = can.create_oval(x-10, y-10, x+10, y+10, fill='red')

dem = Button(fenetre, text="demmarer", width=8, command=start).pack(side=TOP)
arr = Button(fenetre, text="arreter", width=8, command=stop).pack(side=TOP)
================================================

Dans mon tuto, il y a un exercice qui demmande de faire varier la couleur de la balle a chaque "virage". J'ai donc essayer de placer can.configure(balle, fill='blue') par exemple dans un des if qui determine si il faut tourner, mais la console m'a renvoyé une erreur. Quel est donc la methode a utiliser pour effectuer cette action ?

Merci beaucoup, Nils

edit : ca doit etre vraiment super simple quand on connais tkinter depuis des annees, mais il y a quelques jours, je pensait que python etait juste un gros serpent... J'aimerai une réponse si possible pas trop agressive... :)

4 réponses

nyko77 Messages postés 6 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 29 janvier 2010
26 janv. 2010 à 21:23
Bonjour,
tu y es presque. il faut utiliser .itemconfigure() et non pas configure() pour modifier les attributs d'un item. .configure() modifie les propriétés du canvas (taille, couleur...) mais pas celles des items.

# -*- coding: Latin-1 -*-
from Tkinter import *

def move():
global x, y, dx, dy
x, y = x+dx, y+dy
if x >180:
can.itemconfigure(balle, fill=colors[1])
x, dx, dy = 180, 0, 5
if y >180:
can.itemconfigure(balle, fill=colors[2])
y, dx, dy = 180, -5, 0
if x <20:
can.itemconfigure(balle, fill=colors[3])
x, dx, dy = 20, 0, -5
if y <20:
can.itemconfigure(balle, fill=colors[0])
y, dx, dy = 20, 5, 0
can.coords(balle, x-10, y-10, x+10, y+10)

if flag==1:
fenetre.after(30,move)

def start():
global flag
if flag==0:
flag=1
move()

def stop():
global flag
flag=0

x, y = 20, 20
colors = ["red", "blue", "green", "yellow"]

flag = 0
dx, dy = 5, 0

fenetre = Tk()
fenetre.title("exo d'anim ac Tkinter")

can = Canvas(fenetre, width=200, height=200, bg='white', bd=1, relief=GROOVE)
can.pack(side=LEFT)
balle = can.create_oval(x-10, y-10, x+10, y+10, fill=colors[0])

dem = Button(fenetre, text="demmarer", width=8, command=start).pack(side=TOP)
arr = Button(fenetre, text="arreter", width=8, command=stop).pack(side=TOP)

fenetre.mainloop()

0
nikko76600 Messages postés 19 Date d'inscription lundi 25 décembre 2006 Statut Membre Dernière intervention 20 avril 2010
27 janv. 2010 à 00:30
super !! Merci beaucoup, très sympa :)
une autre petite question a ce sujet... on peut-on trouver toute ces "classes" ? (je ne connais pas encore le tous vocabulaire...)

Encore merci :)
0
nyko77 Messages postés 6 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 29 janvier 2010
27 janv. 2010 à 21:03
Voila un lien vers la documentation tkinter: http://infohost.nmt.edu/tcc/help/pubs/tkinter/. tu y trouveras tous les objets disponible pour Tkinter (en anglais bien sûr).
0
nikko76600 Messages postés 19 Date d'inscription lundi 25 décembre 2006 Statut Membre Dernière intervention 20 avril 2010
27 janv. 2010 à 23:57
nickel, merci bcp !
0
Rejoignez-nous