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 :

traçage rond avec un clic de sourie


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    routier
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut traçage rond avec un clic de sourie
    Bonjour à tous, je suis nouveau sur le forum et j'ai pas l'habitude des forums donc j'espere que je post au bon endroit.

    Voici mon probleme :
    J'ai acheté un livre et je programme en python depuis peu.
    Me voila face à un exercice et je bloque quand il s'agit de faire dessiner au programme un rond la où a lieu le clic.
    Voici mon script :


    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
    from tkinter import *
     
    def pointeur(event):
        chaine.configure(text = "clic détecté en X=" + str(event.x) +\
                    ", Y =" + str(event.y))
     
    def rond(x,y,r=5,coul='blue'):
        "tracé d'un rond aux coordonnées du clic"
        cadre.create_oval(x-r,y-r,x+r,y+r, outline=coul)
     
    def cercle():
        "dessiner le rond"
        pos1=int(event.x)
        pos2=int(event.y)
        rond(pos1,pos2)
     
    fen1=Tk()
    cadre = Canvas(fen1, width =200, height =150, bg="light yellow")
    cadre.bind("<Button-1>", pointeur)
    cadre.bind("<Button-1>", cercle)
    cadre.pack()
    chaine =Label(fen1)
    chaine.pack()
     
    fen1.mainloop()
    Et voici l'erreur que je n'arrive pas à réparer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/tkinter/__init__.py", line 1399, in __call__
        return self.func(*args)
    TypeError: cercle() takes no arguments (1 given)

    Quelqu'un peut-il m'aider ?
    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Bonjour,

    Lorsque l'évènement clic de souris est déclenché, celui-ci est en fait un télégramme comportant diverses informations.

    Relié à la fonction cercle() celle-ci est donc appellée avec ce télégramme en argument.

    Argument qui te permet, comme tu le fais d'ailleurs, de récupérer les coordonnées du clic.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def cercle(event):
        "dessiner le rond"
        pos1=int(event.x)
        pos2=int(event.y)
        rond(pos1,pos2)

  3. #3
    Candidat au Club
    Homme Profil pro
    routier
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Merci beaucoup VinsS,
    T'as réponse est très claire et grace à toi sa marche

    Je trouve que je bloque souvent sur des trucs comme sa, j'espère que c'est normal parce que je commence à me demander si je vais arriver à programmer correctement un jour..

    Encore merci je retourne bosser mon Python

  4. #4
    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,

    Citation Envoyé par laboube Voir le message
    J'ai acheté un livre et je programme en python depuis peu.
    Me voila face à un exercice et je bloque quand il s'agit de faire dessiner au programme un rond la où a lieu le clic.
    Pourquoi ne pas faire simple ?
    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
    def cercle(event):
        r = 5
        coul = 'blue'
        chaine.configure(text="clic détecté en X=%s Y=%s" % (str(event.x), str(event.y)))
        pos1 = int(event.x)
        pos2 = int(event.y)
        cadre.create_oval(pos1-r, pos2-r, pos1+r, pos2+r, outline=coul)
     
    fen1 = Tk()
    cadre = Canvas(fen1, width=200, height=150, bg="light yellow")
    cadre.bind("<Button-1>", cercle)
    cadre.pack()
    chaine = Label(fen1)
    chaine.pack()
    fen1.mainloop()

  5. #5
    Candidat au Club
    Homme Profil pro
    routier
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Pourquoi ne pas faire simple ?
    Effectivement, en voyant le script que tu me propose c'est beaucoup plus simple. D'ailleurs je t'en remercie, sa me fais un bon exemple de quelque chose de bien fait.

    Malheuresement, je n'ai pas encore les reflexes et les bonnes méthodes. je réagis en tant que debutant face a mes programmes et j'ai donc beaucoup de mal a bien les structurer pour l'instant. ( J'ai les neurrones qui brules)

    Merci et bonne soirée

  6. #6
    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
    Vous suivez un tuto et c'est une bonne chose.
    Tout bouquin pédagogiquement bien fait est là pour vous amener aussi une tournure (Pythonnesque) d'esprit.
    Dans ce sens l'auteur attend que votre réponse à son exercice soit le résultat de ce qu'il vous montre dans le chapitre (et les précédents) mais aussi de votre réflexion/approche du langage.
    Ma réponse, bien que simple ici et n'ayant pas l'énoncé, a donc des chances de ne pas correspondre à ce qui est demander. Pire: Cela risque de fausser le fil pédagogique entrepris.
    Dans ce sens repensez au chapitre(s), exercices précédents et ajoutez y un zest de votre réflexion personnelle : vous aurez votre code.
    Les difficultés viennent souvent du fait que l'on passe rapidement un sujet et que l'on n'arrive pas a avoir une vue d'ensemble. Il arrive aussi que nous n’adhérions pas à une pédagogie et dans ce cas vous pouvez toujours regarder si vous comprenez mieux une autre approche.

    Pour ce qui est des réflexes et des bonnes méthodes c'est autre chose:
    Un réflexe implique l’acquit et il me semble que pour le moment vous apprenez. De plus je ne pense pas qu'un réflexe sans réflexion soit ce qu'attend l'auteur de votre bouquin.
    Les 'bonnes méthodes' c'est votre trésor de guerre, votre livre de recettes. Vous allez vite voir qu'en Python il y a bien souvent de multiples solutions à un problème donné. La 'meilleure' (bien souvent la plus simple) c'est votre expérience et vos tests qui vous la donnerons.

    Si vous avez les neurones qui brûlent c'est une bonne chose : cela commence a renter.

    Bon code et @++

  7. #7
    Candidat au Club
    Homme Profil pro
    routier
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : routier
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Par défaut
    Merci PauseKawa,

    sa motive bien un message comme sa.

    Sa me rassure deja dans ma situation, et puis je vais continuer à persévérer encore et encore.

    A bientôt

Discussions similaires

  1. faire des additions avec des clics de souris
    Par abdelus75 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/03/2009, 08h45
  2. Réponses: 4
    Dernier message: 18/02/2009, 18h14
  3. Réponses: 0
    Dernier message: 07/11/2008, 23h48
  4. Rafraichir OnPaint() avec clic de souris
    Par dragongia_fr dans le forum MFC
    Réponses: 2
    Dernier message: 27/04/2008, 13h39
  5. Réponses: 4
    Dernier message: 10/09/2006, 19h06

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