Clic et logique booléen avec tkinter
giny28
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
nidhogg-59 Messages postés 102 Date d'inscription Statut Membre Dernière intervention -
nidhogg-59 Messages postés 102 Date d'inscription Statut Membre Dernière intervention -
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()) :
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 que j'ai lu 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 :
Mais le shell dit que la variable couleur n'est pas définie , voilà le message que j'obtiens :
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 :
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()) :
>>> 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 que j'ai lu 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 :
>>> 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="")
A voir également:
- Clic et logique booléen avec tkinter
- Atout clic - Télécharger - Éducatifs
- Excel double clic cellule source ✓ - Forum Excel
- Windows 11 clic droit afficher plus d'options par défaut - Guide
- Afpa tests niveau 3 d'entrée en formation : français, maths, logique ✓ - Forum Études / Formation High-Tech
- Clic gauche souris ne fonctionne plus - Forum souris / Touchpad
1 réponse
Bonjour!
Dans ton premier code, le second if est dans le premier if, donc je suppose que dans tous les cas, tu devais avoir un rect vert...
Et toujours dans le premier code, juste après avoir mis 'if couleur is not 0 :', tu aurais aussi du mettre 'couleur = 0'.
Aussi, certaines variables sont utilisées avant d'être crées.
En gros ça donnerais ça:
Bon, j'ai pas testé... =\ Mais ça devrait le faire
Sinon, pour ce qui est des variables globales, il y mieux:
Voici deux codes équivalant (le second est plus 'propre' car on, utilise pas de variables globales)
Bon, pour les autres code:
le second, bah dans l'erreur ça parle de la ligne 6 de la fonction 'dessine' alors qu'il n' y a que 5 lignes, et puis bon... L'erreur donnée par Tk n'est pas vraiment compréhensible... (il manque pas un bout?)
Pour le dernier code, dans la forme il est bon, mais... Qu'est-ce qui cloche?
En fait ça serait mieux si tu disais ce qui n'allait pas car mis à part le changement de couleur inexistant, je ne vois pas d'erreur...
Sur ce, si t'as encore des erreurs, n'hésite pas, et n'oublie pas de préciser ce qui cloche/l'erreur donnée par python.
Bonne soirée/journée...
Dans ton premier code, le second if est dans le premier if, donc je suppose que dans tous les cas, tu devais avoir un rect vert...
Et toujours dans le premier code, juste après avoir mis 'if couleur is not 0 :', tu aurais aussi du mettre 'couleur = 0'.
Aussi, certaines variables sont utilisées avant d'être crées.
En gros ça donnerais ça:
def dessiner(event): global couleur #d'abord on créé les variables x, y, c et d x, y = event.x, event.y c = event.widget d = 20 # diagonale # puis on trace les rect. if couleur is 0: # Si couleur = 0 = rouge c.create_rectangle(x - d, y - d, x + d, y + d, fill='red', outline="") couleur = 1 # on change la couleur rouge->vert else: # si c'est pas rouge, c'est obligatoirement vert... c.create_rectangle(x - d, y - d, x + d, y + d, fill='green', outline="") couleur = 0 # on change la couleur vert->rouge
Bon, j'ai pas testé... =\ Mais ça devrait le faire
Sinon, pour ce qui est des variables globales, il y mieux:
Voici deux codes équivalant (le second est plus 'propre' car on, utilise pas de variables globales)
a = 0 def new_a(): global a a = 3 new_a()
a = 0 def new_a(): a = 3 return a a = new_a()
Bon, pour les autres code:
le second, bah dans l'erreur ça parle de la ligne 6 de la fonction 'dessine' alors qu'il n' y a que 5 lignes, et puis bon... L'erreur donnée par Tk n'est pas vraiment compréhensible... (il manque pas un bout?)
Pour le dernier code, dans la forme il est bon, mais... Qu'est-ce qui cloche?
En fait ça serait mieux si tu disais ce qui n'allait pas car mis à part le changement de couleur inexistant, je ne vois pas d'erreur...
Sur ce, si t'as encore des erreurs, n'hésite pas, et n'oublie pas de préciser ce qui cloche/l'erreur donnée par python.
Bonne soirée/journée...