Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Futur Membre du Club
    Inscrit en
    mars 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 95
    Points : 15
    Points
    15

    Par défaut event handling + clic de souris: comment ajouter des paramètres?

    Bonjour,

    J'ai un souci pour un programme python qui est similaire à la version minimaliste suivante:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import matplotlib.pyplot as plt
    fig = plt.figure()
     
    def onclick(event):
      print event.button
     
    connection_id = fig.canvas.mpl_connect('button_press_event', onclick)
    plt.show()
    En fait, j'aimerais pouvoir entrer dans l'action 'onclick' d'autres paramètres (deux entiers) en plus de l'event. La fonction ressemblerait à ça:

    Code :
    1
    2
    3
    4
    5
    6
    7
     
    def onclick(event,a,b):
      print event.button
      print a,b,a+b
     
    connection_id = fig.canvas.mpl_connect('button_press_event', onclick(x1,x2))
    plt.show()
    mais j'ai le message d'erreur suivant:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
        return self.func(*args)
      File "cfht2d.py", line 165, in action
        cid = fig.canvas.mpl_connect('button_press_event', onclick(lmin,lmax))
    TypeError: onclick() takes exactly 3 arguments (2 given)
    Auriez-vous une autre méthode à suggérer pour contourner ça?

    Merci!

  2. #2
    Expert Confirmé Avatar de PauseKawa
    Homme Profil pro Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
    fig = plt.figure()
     
    def onclick(event, x, y):
      print event.button, x, y
     
    x1 = 1
    y1 = 10
    connection_id = fig.canvas.mpl_connect('button_press_event', lambda e: onclick(e, x1, y1))
    plt.show()
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Futur Membre du Club
    Inscrit en
    mars 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : mars 2008
    Messages : 95
    Points : 15
    Points
    15

    Par défaut

    ça a l'air de marcher. merci! ;-)

  4. #4
    Expert Confirmé Avatar de PauseKawa
    Homme Profil pro Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    Par défaut

    Ceci dit, pour le code donné, les variables sont visibles (dans l'espace de nom global) dans onclick
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import matplotlib.pyplot as plt
    fig = plt.figure()
     
    def onclick(event):
        print event.button, a, b
     
    a = 1
    b = 10
    connection_id = fig.canvas.mpl_connect('button_press_event', onclick)
    plt.show()
    D'après l'erreur que vous nous montrez vos 'x1, y1' (lmin, lmax) pourrez ne pas être fixes, dans ce cas attention de bien donner la valeur au moment de l’exécution du code: lambda ev, max=lmax, min=lmin: onclick(ev, max, min)

    @+
    Merci d'utiliser le forum pour les questions techniques.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •