Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > GUI
GUI Forum d'entraide sur les bibliothèques pour interfaces graphiques en Python
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/02/2012, 14h50   #1
nico!
Candidat au titre de Membre du Club
 
Inscription : mars 2008
Messages : 95
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 95
Points : 13
Points : 13
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!
nico! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 15h02   #2
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
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 617
Points : 3 730
Points : 3 730
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.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 15h38   #3
nico!
Candidat au titre de Membre du Club
 
Inscription : mars 2008
Messages : 95
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 95
Points : 13
Points : 13
ça a l'air de marcher. merci! ;-)
nico! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 16h34   #4
PauseKawa
Expert Confirmé
 
Avatar de PauseKawa
 
Homme Patrice BLANGARIN
Technicien Help Desk, maintenance, réseau, système et +
Inscription : juin 2006
Messages : 2 617
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 617
Points : 3 730
Points : 3 730
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.
PauseKawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h20.


 
 
 
 
Partenaires

Hébergement Web