Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python][Tkinter]

Sujet résolu
    13 novembre 2007 à 17:02:18

    Bonjour a tous. Je dois me remettre a Tkinter un peu dans le sujet de Tp en cours et voulant allez plus loin (le tp consisté a affiché un cercle dans un canvas quant on cliqué), je voudrai que non seulement il m'ajoute un cercle ( sa c'est fait) mais que il continue tant que le bouton n'est pas relaché et sa...je vois pas.


    Je vous mets le petit bout de code qui concerne cela :

    1. def createCanvas(self):
    2.         self.can=Canvas(self.frame2,width=300,height=300,bg="white")
    3.         self.can.pack()
    4.         self.can.bind("<ButtonPress-1>",self.dessinerCercle)
    5.         self.can.bind("<ButtonPress-3>",self.supp)
    6. def dessinerCercle(self,event):
    7.         print event
    8.         self.can.create_oval(event.x-10,event.y-10,event.x+10,event.y+10,fill="blue")
    • Partager sur Facebook
    • Partager sur Twitter
      16 novembre 2007 à 3:53:28

      Salut,

      Qu'est-ce que tu veux faire exactement ? Tes explications ne sont pas très claires.
      Tu veux dessiner une série de cercles tant que le bouton de la souris est enfoncé, et dont les centres seraient alignés avec le tracé de la souris ?
      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2007 à 3:16:04

        Voila, c'est exactement cela.

        J'arrive a faire un code qui me trace un cercle a chaque clique de souris, mais je voudrai qu'il me trace les cercles dés que je clique sur la souris et tant que je n'est pas relaché.


        PS: désolé de remonté mon post, mais un gros projet mais tombé dessus, et je n'est meme plus pensé a ma question jusqu'a ce soir ^^


        En gros pour résumé : quel ordre donné au bind pour qu'il commence qu'en je clique gauche et comme le faire continué tant que je n'est pas relaché le bouton gauche.
        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2007 à 4:51:47

          Salut,

          Le bind que tu cherches <B1-Motion>, il est appelé à chaque fois que la souris se déplace avec le bouton 1 enfoncé.
          Comme d'habitude avec les binds, un objet evènement est passé en paramètre, avec la postion (x ; y) du curseur.

          Une petite démonstration pour compléter :
          1. #!/usr/bin/env python
          2. # -*- coding: utf-8 -*-
          3. from Tkinter import *
          4. from random import randint
          5. class App(Tk):
          6.     def __init__(self):
          7.         Tk.__init__(self)
          8.         self.can = Canvas(self, height=500, width=500, bg="white", relief=SUNKEN, bd=5)
          9.         self.can.pack()
          10.         self.bind("<Button-1>", self.activer) # clic gauche
          11.         self.bind("<B1-Motion>", self.tracer) # déplacement souris clic gauche enfoncé
          12.     def activer(self, event):
          13.         self.x, self.y = event.x, event.y
          14.     def tracer(self, event):
          15.         # la condition est optionnelle, mais elle permet de forcer un espace
          16.         # d'au moins 30px entre les centres des cercles (sinon c'est pas beau)
          17.         if abs(self.x - event.x) > 30 or abs(self.y - event.y) > 30:
          18.             r = randint(5, 55)                 # rayon
          19.             c = "#%06x" % randint(0, 16777215) # une couleur parmi (2 ** 24) - 1 possibles
          20.             self.x, self.y = event.x, event.y  # copie des nouvelles coordonées
          21.             self.can.create_oval(self.x-r, self.y-r, self.x+r, self.y+r, fill=c)
          22. if __name__ == "__main__":
          23.     App().mainloop()
          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2007 à 19:43:26

            D'accord, et bien merci beaucoup, je vais voir tout cela.

            Encore merci et topic resolu
            • Partager sur Facebook
            • Partager sur Twitter

            [Python][Tkinter]

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown