Changement des propriétés d'un objet

Signaler
Messages postés
19
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
20 avril 2010
-
nikko76600
Messages postés
19
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
20 avril 2010
-
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

Messages postés
6
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
29 janvier 2010

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()

Messages postés
19
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
20 avril 2010

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 :)
Messages postés
6
Date d'inscription
vendredi 8 septembre 2006
Statut
Membre
Dernière intervention
29 janvier 2010

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).
Messages postés
19
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
20 avril 2010

nickel, merci bcp !