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 :

dessiner un triangle sur canvas


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut dessiner un triangle sur canvas
    Voici un programme qui doit dessiner un cercle un carre et triangle avec la souris sur un canvas (tkinter). La partie qui dessine un triangle ne marche. A lma compilation il dit que " config " est innexistant. Il reconnait pas cette focntion.

    voici le code :


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    from Tkinter import *
     
     
    class Dessiner(Tk):
     
     
        def __init__(self):
            Tk.__init__(self)
     
            self.fig=StringVar()
            self.fig.trace("w", self.fig_callback)
     
     
            self.title("Dessiner: carre, triangle ou cercle")
            self.canvas=Canvas(self, bg='white', width=600, height=600)
            self.canvas.pack()
     
            #**************************************
            Button(self, text="Quitter", width=20, command=self.quit).pack(side=LEFT)
            self.bcarre = Button(self, text="Carre", fg='black', width=20, command=lambda: self.fig.set("Carre")).pack(side=LEFT)
            self.bcercle = Button(self, text="Cercle", fg='black', width=20, command=lambda: self.fig.set("Cercle")).pack(side=LEFT)
            self.btriangle = Button(self, text="Triangle", fg='black', width=20, command=lambda: self.fig.set("Triangle"))
            self.btriangle.pack(side=LEFT)
            #***************************************
     
            self.fig.set("Cercle")
            self.fig.set("Carre")
            self.fig.set("Triangle")
     
            self.canvas.bind('<ButtonPress-1>',self.clic)
            self.canvas.bind('<B1-Motion>',self.modif)
     
    #-----------------------------------------------------------------------------------------------------------------------
        def fig_callback(self, *args):
            if self.fig.get() == "Cercle":
                self.bcercle.config(fg='white')
                self.bcarre.config(fg='black')
                self.btriangle.config(fg='black')
     
                elif self.fig.get() == "Carre":
                self.bcercle.config(fg='black')
                self.bcarre.config(fg='white')
                self.btriangle.config(fg='black')
     
                elif self.fig.get() == "Triangle":
                self.bcercle.config(fg='black')
                self.bcarre.config(fg='black')
                self.btriangle.config(fg='white')
    #-----------------------------------------------------------------------------------------------------------------------
        def modif(self, event):
            self.x2=event.x
            self.y2=event.y
            self.x3=event.x
            self.y3=event.y
     
            if (self.fig.get() == "Cercle" or self.fig.get()== "Carre"):
                self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2)
            if (self.fig.get() == "Triangle") :
                self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2, self.x3, self.y3)
    #-----------------------------------------------------------------------------------------------------------------------
        def clic(self, event):
            self.x1=event.x
            self.y1=event.y
            self.x2=event.x
            self.y2=event.y
            self.x3=event.x
            self.y3=event.y
     
            if self.fig.get() == "Cercle":
                    self.item=self.canvas.create_oval(self.x1, self.y1, self.x2, self.y2, fill='black')
                  elif self.fig.get() == "Carre":
                        self.item=self.canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2, fill='black')
                   elif self.fig.get() == "Triangle":
                        self.item=self.canvas.create_polygon(self.x1, self.y1, self.x2, self.y2,self.x3, self.y3, fill='black')
    #-----------------------------------------------------------------------------------------------------------------------
     
    if __name__== '__main__':
        fenetre=Dessiner()
            fenetre.mainloop()
    VOILA ? LA PARTIE QUI POSE PROBELE EST SIGNALE EN ROUGE ;

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Moi c'est cette partie que je ne comprend pas :

    Citation Envoyé par kouhou88 Voir le message
    Voici un programme qui doit dessiner un cercle un carre et triangle avec la souris sur un canvas (tkinter). La partie qui dessine un triangle ne marche. A lma compilation il dit que " config " est innexistant. Il reconnait pas cette focntion.
    Le message exact ? Compilation ? Explique svp.

    @clic4 : Pour ce qui est de la différence entre create_oval/create_rectangle et create_polygon ok pour les coords mais son code est bon pour moi (Linux)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    self.fig.set("Cercle")
    self.fig.set("Carre")
    self.fig.set("Triangle")
    Inutile non ? Tu initialise ta variable tk par défaut une fois et c'est tout.

    Autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def modif(self, event):
        self.x2=event.x
        self.y2=event.y
        self.x3=event.x
        self.y3=event.y
        if (self.fig.get() == "Cercle" or self.fig.get()== "Carre"):
            self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2)
        elif (self.fig.get() == "Triangle") :
            self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2, self.x3, self.y3)
    @+

  3. #3
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Je reprend la question sur le triangle

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    from Tkinter import *
     
    class Dessiner(Tk):
        def __init__(self):
            Tk.__init__(self)
     
            self.fig=StringVar()
            self.fig.trace("w", self.fig_callback)
     
            self.title("Dessiner: carre, triangle ou cercle")
     
            self.canvas=Canvas(self, bg="white", width=600, height=600)
            self.canvas.pack(side=TOP)
     
            frmbout = Frame(self) # Conteneur pour centrer les boutons
            frmbout.pack(side=TOP)
            Button(frmbout, text="Quit", command=self.destroy).pack(side=RIGHT, padx=5, pady=2, ipadx=2)
    	self.bcarre = Button(frmbout, text="Carre", fg="black", command=lambda: self.fig.set("Carre"))
    	self.bcarre.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
    	self.bcercle = Button(frmbout, text="Cercle", fg="black", command=lambda: self.fig.set("Cercle"))
    	self.bcercle.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
            self.btriangle = Button(frmbout, text="Triangle", fg="black", command=lambda: self.fig.set("Triangle"))
            self.btriangle.pack(side=RIGHT, padx=5, pady=2, ipadx=2)
     
            self.fig.set("Cercle") # Inutile d'initialiser self.fig plusieurs fois
     
            # Cela ne semble pas etre le sujet mais :
            # Il est aussi possible de gerer cela par evenement avec un self.fig=None comme flag
            # de l'état du bouton
            # Tu garde ton def clic
            # Tu fais un self.canvas.bind("<Motion>", modif) ou tu rajoute un test sur self.fig
            # Tu fais un bind self.canvas("<ButtonRelease-1>", self.clicoff) > def clicoff: self.fig=None
            # Cela te permet de vérifier la présence d'un item lors du clic pour le modifier par la suite. 
            self.canvas.bind("<ButtonPress-1>",self.clic)
            self.canvas.bind("<B1-Motion>",self.modif)
     
        def fig_callback(self, *args):
            if self.fig.get() == "Cercle":
                self.bcercle.config(fg="white")
                self.bcarre.config(fg="black")
                self.btriangle.config(fg="black")
     
            elif self.fig.get() == "Carre":
                self.bcercle.config(fg="black")
                self.bcarre.config(fg="white")
                self.btriangle.config(fg="black")
     
            elif self.fig.get() == "Triangle":
                self.bcercle.config(fg="black")
                self.bcarre.config(fg="black")
                self.btriangle.config(fg="white")
     
        def modif(self, event):
            # Pas besoin de reprendre les points x1 et y1. C'est le départ
            self.x2=event.x
            self.y2=event.y
     
            if self.fig.get() != "Triangle":
                self.canvas.coords(self.item, self.x1, self.y1, self.x2, self.y2)
            else:
                dist=self.x2 - self.x1 # Ton calcul pour le triangle n'étais pas bon.
                self.canvas.coords(self.item, self.x1-dist, self.y1+dist, self.x1, self.y1, self.x1+dist, self.y1+dist)
     
        def clic(self, event):
            self.x1=event.x
            self.y1=event.y
            if self.fig.get() == "Cercle":
                self.item=self.canvas.create_oval(self.x1, self.y1, self.x1, self.y1, fill="black")
            elif self.fig.get() == "Carre":
    	    self.item=self.canvas.create_rectangle(self.x1, self.y1, self.x1, self.y1, fill="black")
            elif self.fig.get() == "Triangle":
    	    self.item=self.canvas.create_polygon(self.x1, self.y1, self.x1, self.y1, self.x1, self.y1) # fill="black" inutile dans le cas du polygon.
     
    if __name__== "__main__":     
        fen=Dessiner()    
        fen.mainloop()
    C'est quoi l'erreur de compilation ?

    @+

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    le problème reste irrésolu, je ne vois vraiment pas comment y procéder. Je suis debutant avec tkinter, alllllooooo tout le monde au secours

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    J'avoue être perdu.
    Tu parle de non affichage du triangle et d'erreur de compilation.
    Pourrais tu redonner exactement ton problème ? (Je suis long parfois...)

    Merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Par défaut
    voyant c pas aussi complique que ça : pour compiler un fichier tu fait
    python nomfcihier.py sur la console : quand je fait ça il y a une fenetre qui s'affiche oû je dessine, et puis quand je reviens sur la console , je trouve des messages d'erreur. voila en clair

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Ah... Python est un langage interprété. Lorsque tu fais python nomfcihier.py dans ta 'console' (ligne de commande ou IDLE ?). Pas de compilation.
    Je ne vais pas aller plus loin sur le sujet (merci de faire de même pour les autres, ce n'est pas le sujet). Regarde sur le net pour la différence entre un langage interprété ou compilé.

    Fais nous un copier/coller des messages svp.

    @+

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

Discussions similaires

  1. Redimensionner taille d'un TImage + dessin sur canvas
    Par Ben_Le_Cool dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2011, 16h39
  2. Problème de dessin sur Canvas
    Par ZouBi dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 18/06/2011, 11h28
  3. [SWT] Dessin périodique sur canvas
    Par Knuckles dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 29/11/2008, 13h33
  4. Réponses: 5
    Dernier message: 23/09/2006, 12h40
  5. Réponses: 1
    Dernier message: 05/08/2006, 20h43

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