Bonjour,
je cherche à permettre des hover event sur un graph matplotlib.
j'ai trouvé une solution ci dessous qui marche bien:

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
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
 
x = np.random.rand(15)
y = np.random.rand(15)
 
 
fig, ax = plt.subplots()
sc = plt.scatter(x, y, s = 200)
 
def hover(event):
    if event.inaxes == ax:
        cont, ind = sc.contains(event)
        if cont:
            print("OK")
        else:
            print("KO")
 
fig.canvas.mpl_connect("motion_notify_event", hover)
 
plt.show()
dans l'exemple ci dessus "event" et "ax" correspondent respectivement à :
motion_notify_event: xy=(1, 244) xydata=(None, None) button=None dblclick=False inaxes=None
AxesSubplot(0.125,0.11;0.775x0.77)

Lorsque j'essaie d'appliquer cette méthode en embarquant le graphique dans un Widget, je n'arrive pas à faire passer (ou récupérer) certains paramètres... et ça me bloque... j'arrive pas à trouver un moyen d'embarquer la solution ci dessus! dans l'exemple ci dessous, "figure_7" et "graphique_7" appartiennent à une classe QWidget donc la méthode hover appartient elle aussi à cette même classe:

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
from matplotlib.backends.backend_qt5agg import (FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
 
figure_7 = FigureCanvas(Figure())
graphique_7 = figure_7.figure.subplots(nrows=1, ncols=1)
 
try:
       graphique_7.scatter([1,2,3,4,5,6,7,8,9], [5,4,7,8,9,3,2,1,6])
       figure_7.figure.canvas.mpl_connect("motion_notify_event", self.hover)
except:
       print("hover failed")
 
 
def hover(arg1, arg2):
        print(arg1)
        print(arg2)
        try:
            #????
        except:
            print("ko")
Dans cet exemple, l'appel du mpl_connect ne semble pas accepter de paramètre lié à la méthode hover. ça m'arrangerait de pouvoir faire passer mon graphique_7! mais même quand je bascule dans ma classe avec "self.graphqiue_7" dans mon __init__ et dans ma methode... ça marche pas...
Contrairement au premier exemple du message je n'ai pas 1 paramètre "event" de récupéré dans ma méthode mais deux (dont le event qui correcpond à arg2)... j'ai essayé de vérifier les types de chacun de mes objets pour ne pas me tromper d'appel mais je n'arrive pas à communiquer "normalement" avec la méthode appelé via le mpl_connect.

des idées?
merci