giny28 | Bonjour,
En ce moment , j'utilise tkinter et je voudrais créer un rectangle en faisant create_rectangle(...,options) .Mais je bloque sur un exercice qui nous demande : que lors du premier clic , une fonction qui dessine le rectangle doit retourner un rectangle de couleur rouge, et lors du 2ème clic , un rectangle de couleur verte , ensuite au prochain clic , le rectangle rouge doit étre et aprés vert ....(et ainsi de suite ) .
J'ai pensé à la logigue booléenne , en initialisation une variable couleur , et l'incrémenter par la suite , en utilisant les conditions if , mais çà ne marche pas , je ne saisis pas le fonctionnement de tkinter et l'ampleur de l'argument event qui signifie évènement (pourtant , j'ai fait des heures de recherches)
Voilà mon bout de code , et petite précision (il y'a une fonction manager() qui regroupe la position du clic et la fonction dessiner() , mais le noyau dur c'est la fonction dessiner()) :
Code :
- >>> couleur = 0
- >>> def dessiner(event):
- global couleur
- if couleur is 0 : c.create_rectangle(x - d, y - d, x + d, y + d, fill='red', outline="" )
- ... x, y = event.x, event.y
- ... c = event.widget
- ... d = 20 # diagonale
- ... couleur = 1
- if couleur is not 0 :c.create_rectangle(x - d, y - d, x + d, y + d, fill='green', outline="" )
- x, y = event.x, event.y
- c = event.widget
- d = 20
|
En quoi mon raisonnement est faux ? J'ai un autre code concernant la parité en fonction d'un compteur des rectangles , mais c'est encore pire Une idée consisterait à retirer par le biais de l'index d'une genre le liste la couleur , en définissant à la base , un variable avec les deux couleurs :
COLORS = ('red', 'green')
def dessine(event):
global couleur
c.create_rectangle(x - d, y - d, x + d, y + d, fill=COLORS[couleur], outline="" )
Mais le shell dit que la variable couleur n'est pas définie , voilà le message que j'obtiens :
Exception in Tkinter callback Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1473, in __call__
return self.func(*args)
File "<stdin>", line 3, in manager
File "<stdin>", line 6, in dessine
Pourtant , lorsque j'écris aprés que couleur = 0 ou couleur = 1 , j'obtiens un carré de couleur rouge et aprés verte(çà fonctionne comme les index des listes avec COLORS[couleur]) mais justement ce n'est pas juste puisque c'est le clic de la souris qui doit déclencher l'action et non mon écriture sur le shell ...
_J'ai fait un autre test mais sans succés :
Code :
- >>> var = True
- >>> var
- True
- >>> var = not var
- >>> var
- False
- >>> var = not var
- >>> var
- True
- >>> def dessine(event) :
- ... c = event.widget
- ... d = 20
- ... x, y = event.x, event.y
- ... if green == True :c.create_rectangle(x - d, y - d, x + d, y + d, fill="green", outline="" )
- ... else : c.create_rectangle(x - d, y - d, x + d, y + d, fill = 'red', outline="" )
|
|