Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Traçage à main levée avec tkinter

+2 votes

Version : Python3
Module : tkinter

J'essaye de répondre à cette problématique :

permettez la saisie d’une trace à "main levée" dans le canvas, cette
saisie se faisant par la combinaison de la touche Ctrl et du bouton
gauche de la souris. L’objet géométrique crée doit être une ligne
brisée (createline) de couleur noire. Lorsque le curseur souris passe
sur cette trace (voir tag
bind), celle-ci doit changer de couleur
(rouge par exemple) et la barre d’état doit afficher l’ID de l’objet
graphique. L’appui du bouton 1 de la souris sur cette trace doit
permettre de la déplacer (move). S’éloigner de la trace doit la
remettre à sa couleur d’origine.

Voici mon code courant (incomplet) :

import tkinter as tk
import tkinter.filedialog as dialog
import mylib as mylib

root = tk.Tk()

dessin=mylib.my_draw(root)

mylib.my_menu(root,dessin)

def tracage(event):
        global root, cadre
        x,y = event.x, event.y
        G = cadre.coords(point) # coord de l'objet graphique
        G = # à compléter.. 
        cadre.coords(point,mouse) # 

cadre = tk.Canvas(root,bg="white")
point = cadre.create_line(52,52,53,54)
cadre.bind("<B1-Motion>", tracage)
cadre.pack()

root.mainloop()

Il me manque la partie : # à compléter dans la quelle je dois mettre les valeurs pour la nouvelle coordonnée de ma ligne mais je ne vois pas quelle coordonnées mettre, désolé je n'arrive pas à exprimer clairement le problème car c'est encore confus pour moi l'utilisation de .coord en python, apparement ça permet de déplacer les objets graphiques, donc je dois associer cela à l'action de ma souris.

demandé 17-Fev-2015 par boblinux (3,092 points)

1 Réponse

+1 vote
 
Meilleure réponse

A chaque fois que quelqu'un va tracer un trait, tracage() va être appelée et recevoir en paramètre un objet event qui contient les coordonnée event.x et event.y de la position de la souris à l'instant T. L'idée est donc de dessiner quelque chose à ces coordonnées là. Pour résoudre ton problème, il te faut :

  • toujours avoir les coordonnées précédentes (tu dessines une droite depuis les nouvelles coordonnées vers les anciennes)
  • savoit dessiner une droite à partir de deux jeux de coordonnées

Bonne chance !

répondu 30-Mar-2015 par Sam (4,978 points)
sélectionné 31-Mar-2015 par boblinux
...