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 :

répetition d'une fonction dans un canevas


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut répetition d'une fonction dans un canevas
    Bonjour à tous,je débute avec python et j'essaie pour exercice d'écrire un petit script qui permettrai en cliquant sur un bouton et après dans un canevas d'afficher des carrés à l'endroit ou le click c'est produit.
    Le probleme est qu'après avoir clické ce bouton,les carrés s'affichent à chaque fois que je clicke dans le canevas alors que je voudrait qu'ils apparaissent un par un.
    voici le code et merci d'avance pour votre aide.

    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
    from Tkinter import *
     
    def pointeur(event):
    a=canevas.create_rectangle(event.x+2,event.y+2,event.x-2,event.y-2,fill='red')
     
    def coord():
    canevas.bind("<Button-1>",pointeur)
     
    fen = Tk()
    canevas=Canvas(fen, width =700, height =200, bg="yellow")
    bou1=Button(fen,text='nouveau',command=coord)
    canevas.pack()
    bou1.pack()
     
    fen.mainloop()

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Je penses que tu n'as pas bien compris le rôle de Bind. Dans ton exemple à chaque que tu cliques sur le bouton tu lies l'événement "clique sur canvas" à la fonction pointeur. ça ne sert à rien (enfin uniquement lors du 1er clique).
    Si j'ai bien compris ce que tu veux faire, il faut que tu fasses intervenir une variable pour savoir si il faut afficher le carré. Voici un exemple:

    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
     
    from Tkinter import *
     
    def draw_rect(event):
        global is_clicked
        if is_clicked:
            canevas.create_rectangle(event.x+2, event.y+2, event.x-2, event.y-2, fill='red')
            is_clicked = False
     
    def set_clicked():
        global is_clicked
        if not is_clicked:
            is_clicked = True
     
    fen = Tk()
    is_clicked = False
    canevas=Canvas(fen, width =700, height =200, bg="yellow")
    canevas.pack()
    canevas.bind("<Button-1>", draw_rect)
    Button(fen, text='nouveau', command=set_clicked).pack()
     
    fen.mainloop()
    Et voici la même chose en POO:

    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
     
    from Tkinter import *
     
    class Application:
        def __init__(self):
            fen = Tk()
            self.is_clicked = False
            self.canevas=Canvas(fen, width =700, height =200, bg="yellow")
            self.canevas.pack()
            Button(fen,text='nouveau', command=self.set_clicked).pack()
            self.canevas.bind("<Button-1>", self.draw_rect)
            fen.mainloop()
     
        def set_clicked(self):
            if not self.is_clicked:
                self.is_clicked = True
     
        def draw_rect(self, event):
            if self.is_clicked:
                self.canevas.create_rectangle(event.x+2, event.y+2, event.x-2, event.y-2, fill='red')
                self.is_clicked = False
     
    Application()

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut
    merci pour ton aide!
    Effectivement je n'avais pas bien compris le rôle de Bind.
    Ta réponse m'a permis de remettre les idées dans le bon ordre.
    slts

Discussions similaires

  1. Utilisation d'une fonction dans une procedure
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/08/2005, 15h51
  2. Comment rappeler une fonction dans une liste déroulante
    Par strogos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/05/2005, 23h54
  3. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 15h37
  4. Réponses: 4
    Dernier message: 26/01/2005, 13h08
  5. Programmation d'une fonction dans Rn
    Par simone.51 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/11/2004, 11h30

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