IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Comment associer un clic de souris avec le dessin d'un rond dans un canevas?


Sujet :

Tkinter Python

  1. #1
    Membre du Club Avatar de Antigonos Ier Gonatas
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 78
    Points : 40
    Points
    40
    Par défaut Comment associer un clic de souris avec le dessin d'un rond dans un canevas?
    Bonjour à tous!

    Alors voilà, en suivant les cours de Gérard Swinnen, je suis tombé sur un exercice qui consistait à détecter la zone d'un clic de souris, et de tracer un rond dans la zone de ce clic, sauf que je ne trouve pas le moyen de le réaliser.

    J'ai déja essayé en modifiant un peu le code, mais cela ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    from Tkinter import *
     
     
    def pointeur(event):
        chaine.configure(text = "Clic détecté en X =" + str(event.x) +\
        ", Y =" + str(event.y))
     
     
     
     
    fen = Tk()
    cadre = Canvas(fen, width =200, height =150, bg="light yellow")
    cadre.bind("<Button-1>", pointeur)
     
     
     
    rond = cadre.create_oval(width=3,fille="red")
    rond.bind("<Button-1>",pointeur)
     
     
    cadre.pack()
    chaine = Label(fen)
    chaine.pack()
    fen.mainloop()
    Donc, comment doit-je m'y prendre?
    et aussi, que doit-on écrire pour associer une touche à un événement,
    comme par exemple associer la touche flèche haut avec un mouvement vers le haut?

    Merci d'avance!

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    Bonjour,
    ouille, tu n'es pas du tout dans le bon sens par rapport a ce que tu veux faire.

    1- tu n'a pas de fonction qui génère le dessin d'un rond.
    2- le clic de souris n'est pas associé à la bonne fonction (puisque inéxistante)
    3- le rond.bind est inutile


    essai de revoir ton code par rapport a ces points

    si tu as besoin encore d'aide, n'hésites pas.

  3. #3
    Membre du Club Avatar de Antigonos Ier Gonatas
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 78
    Points : 40
    Points
    40
    Par défaut
    Bon, pour la fonction qui génère le dessin d'un rond, je vais essayer de le faire par moi-même,pour le rond.bind, c'est d'accord, je vais l'effacer,
    par contre, je n'arrive pas à savoir comment associer un clic de souris à une fonction traçant un rond ! Comment s'y prendre?

    édit: Finalement, j'ai aussi quelques problèmes pour générer le dessin de rond .
    En fait, j'aimerais que ma fonction rond ai les paramètres du rond, avec des coordonnées variables, du type, x,y,sauf que je n'arrive pas trop à savoir comment fonctionne précisément la commande .create_oval,au niveau des points; c'est à dire, je vois que l'on doit désigner deux points dans un axe x,y, mais je ne vois pas par exemple où sera le centre du cercle.

    Merci d'avance pour vos réponses!

  4. #4
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    bonjour,
    il faut bien comprendre que pour créer n'importe quel forme sur un Canvas (dans la réalité aussi) on a besoin de ses coordonnées et de sa taille, sinon on ne peux rien faire.

    pour créer un rond, de mémoire c'est qque chose comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oval=canvas.create_oval(x,y,x1,y1,fill='red',width=3,outline="blue")
    ou x,y sont les coordonnées du premier point definissant le cadre englobant l'ovale, et x1,y1 le deuxiéme point.

    en général si tu veux placer le cercle grace au clic de souris, x et y correspondent au coordonnées récupérer lorsque tu clic sur le Canvas
    x=event.x
    y=event.y

    pour récupérer cet évènement il faut que ta fonction le permette. Pour ce faire tu mes en argument dans ta fonction 'event' qui veut dire que ta fonction attend un evénement clavier ou souris pour s'executer.

    voyons ca plus en détails :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    from Tkinter import *   ####### Importation du module Tkinter
    root=Tk()                  ####### Création de ma fenetre
    canvas=Canvas(root,height=200, width=200,bg='white') ## création du canvas
    canvas.grid() ## je place le Canvas avec la méthode .grid()
     
    def dessin_rond(event): ## definition de ma fonction pour créer un rond dans le canvas ; Notes le paramétre "event" attendu en argument
         global root,canvas ## on passe root et canves comme variable globale dans la fonction, ca permet de pouvoir y accéder de l'intérieur de la fonction
         x,y=event.x,event.y ## création de nouvelle variable
         rond=canvas.create_oval(x,y,(x+5),(y+5),fill="red",width=2,outline="blue")  ### Création d'un rond (oval particulier)
     
    canvas.bind('<Button-1>',dessin_rond) ## a l'extérieur de la definition de la fonction j'associe un gestionnaire d'évènement au canvas pour qu'il réagisse lors du clic gauche de la souris
    root.mainloop() #### pour finir je lance le receptionnaire d'événements sur ma fenetre root.
    si tu as des quetion n'hésites pas.

  5. #5
    Membre du Club Avatar de Antigonos Ier Gonatas
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 78
    Points : 40
    Points
    40
    Par défaut
    Wahou, merci !
    Comme explication , je pouvais pas rêver mieux !
    En plus, avec les commentaires, impossible de se perdre !

    Voilà un problème résolu !
    Je me rapproche petit à petit de mon premier jeu!( peut-être un morpion)
    Merci encore, il me reste plus qu'à approfondir encore mon voyage en terre
    pythonienne, et de potasser (un petit peu) sur l'intelligence artificielle
    (c'est dur , j'y comprend rien!).

    Salut, et à la prochaine !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intercepter un clic de souris avec TApplicationEvent..
    Par Jean-Jacques Engels dans le forum Langage
    Réponses: 5
    Dernier message: 26/08/2011, 16h44
  2. comment associer les couleur a un document xml avec xslt
    Par moh_yougo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/01/2006, 16h08
  3. Réponses: 3
    Dernier message: 24/01/2006, 18h38
  4. Réponses: 7
    Dernier message: 27/06/2005, 22h05
  5. Réponses: 8
    Dernier message: 14/03/2005, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo