[Python] Récupérer une valeur d'un rectangle dans Tkinter
Forum Programmation : [Python] Récupérer une valeur d'un rectangle dans Tkinter
Bonjour, j'ai récupéré ce petit bout de code dans un guide:
Code :
|
Il permet, lorsque l'on clique dans un canvas avec des objets (rectangle, cercle, ligne), de sélectionner l'objet le plus près du clic de souris.
Maintenant, ce que j'essayais de faire, c'est de créer un quadrillage où l'on puisse cliquer avec un effet de snap (la souris se colle aux coordonnés ronds, en gros si on pointe sur 15.998 elle se collera sur 16. (Il existe des façon plus simple de faire un snapping, mais j'aimerais tester celle là)
Donc ayant fait un quadrillage, et placé un petit rectangle à chaque croisement de lignes, l'événement le plus proche représente le petit rectangle le plus proche (à moins que l'utilisateur ne clique délibérément sur une ligne, ce qui est un problème...). Maintenant l'objet self.selObject est un tupple représentant le numéro d'apparition du rectangle. Pas très pratique...
Est ce qu'il est possible d'aller chercher, disons les coordonnés bbox de l'événement associé au tupple self.selObject. Parce que self.selObject n'est pas le rectangle, mais qu'un numéro pointant vers ce rectangle.
Pour info, je laisse le code complet en dessous de mon message.
Code :
|
À force de chercher, j'ai pu constater qu'on pouvait récupérer la valeur d'une propriété d'un objet Canvas à l'aide de
a = self.can1.itemcget(self.selObject, "fill" )
Ce que je ne comprends toujours pas, c'est pourquoi l'option dont on cherche la valeur doit être en guillemet lorsque l'on utilise la méthode itemcget(item, option)
Edit: Et comment faire pour récupérer les coordonnés de l'item ? bbox ne fonctionne pas comme option
Message édité par reveurduciel le 16-07-2009 à 17:43:39
Les options sont entre guillemets, parce que derrière il y a un dictionnaire.
Pour changer les coordonées, ce n'est pas dans les options. Il faut utiliser coords(item, x0, y0, x1, y1)
http://www.pythonware.com/library/ [...] tangle.htm
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci CRicky.
Mais je ne veux pas les changer, ça je sais le faire. Je veux en fait les obtenir. En effet, comme j'essais de faire un effet de snapping (la souris colle sur les coordonnés précise), j'ai rempli mon canvas de petites zones (des rectangles) et je récupère la zone la plus proche du clic de la souris.
Cette zone (ce rectangle) est donc une façon de créer une zone dans laquelle les coordonnés du clic de la souris seront arrondis à une telle valeurs.
Maintenant que j'ai le numéro de l'objet rectangle le plus proche, je cherche à obtenir les coordonnés de ce rectangle. Ensuite il me sera facile d'assigner une valeur x et y "snappé" à mon clic.
OK. C'est presque pareil, sur le widget canvas, tu fais un coords(item) et ça te retourne la liste des coordonnées.
http://www.pythonware.com/library/ [...] ethods.htm
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Merci beaucoup. Je croyais que cette méthode ne servait qu'à modifier les coordonnés, mais tu viens de m'apprendre qu'elle peut aussi retourner les coordonnés de l'item existant.
En relisant la référence, c'était bien marqué:
coords(item, *coords) [#]
Returns the coordinates for an item.
item
Item specifier (tag or id).
*coords
Optional list of coordinate pairs. If given, the coordinates will replace the current coordinates for all matching items.
Returns:
If no coordinates are given, this method returns the coordinates for the matching item. If the item specifier matches more than one item, the coordinates for the first item found is returned.
Merci encore
Il y a 244 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
