Seite 1 von 1
Event-Handling Mouse Click mit Matplotplib
Verfasst: Mittwoch 7. Januar 2026, 12:52
von Bright4.55
Hallo zusammen,
weiß jemand vielleicht, wie man einen Mausklick auf einer Grafik abfangen kann, wenn Matplotlib benutzt wird?
Ich weiß, wie es mit pygame funktioniert:
import pygame as p
while running:
for e in p.event.get():
if e.type == p.QUIT:
running = False
elif e.type == p.MOUSEBUTTONDOWN:
if not gameOver and humanTurn:
location = p.mouse.get_pos()
col = location[0]//SQ_SIZE
row = location[1]//SQ_SIZE
if sqSelected == (row, col):
sqSelected= ()
playerClicks = []
--> Ich hätte es gerne genauso auch für Matplotlib. Leider funktioniert es bisher nicht wirklich :/.
import matplotlib.pyplot as plt
Es wird dabei ein Brett gezeichnet mit Plot und Scatter. Ich würde nun gerne die Koordinaten abfangen, wenn ein User auf eine Position drauf klickt (auf ein Scatterposition).
Natürlich währen das Spiel läuft (while running = True).
Gerne würde ich auch einen Doppelklick abfangen ( mit den 2 verschiedenen Koordinaten)
Weiß jemand wie das geht?
Vielen Dank im Voraus.
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Mittwoch 7. Januar 2026, 14:01
von DeaD_EyE
Hab ich noch nie gemacht, aber das Beispiel funktioniert:
https://matplotlib.org/stable/users/exp ... onnections
Code: Alles auswählen
>>> plt.show()
single click: button=1, x=254, y=521, xdata=4.886228, ydata=0.591410
single click: button=1, x=311, y=280, xdata=6.442060, ydata=0.312718
single click: button=1, x=127, y=425, xdata=1.419727, ydata=0.480396
>>>
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Mittwoch 7. Januar 2026, 16:11
von Bright4.55
Hi,
vielen Dank schon mal.
Ja, das habe ich auch gesehen, allerdings bekomme ich da immer einen Fehler, wenn ich es versuche bei mir einzubauen:
def onclick(event):
print(
( event.button,
event.x, event.y, event.xdata, event.ydata))
def boardgrid(self):
self.fig, self.ax = plt.subplots(figsize=(self.board.width/2.4, self.board.height/2.4))
cid = self.fig.canvas.mpl_connect('button_press_event', self.onclick)
plt.ion()
plt.show()
Da bekomme ich immer den Fehler:
TypeError: BoardVisualizer.onclick() takes 1 positional argument but 2 were given
Was wäre denn da falsch?
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Mittwoch 7. Januar 2026, 16:44
von __blackjack__
@Bright4.55 Ist `onclick()` auf einer Klasse definiert? Dann bekommt das ja auch das Objekt übergeben, hat dafür aber nicht das `self`-Argument.
Edit: Alternativ könnte man eine `staticmethod()` daraus machen, falls das tatsächlich keine echte Methode sein soll/muss.
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Donnerstag 8. Januar 2026, 01:52
von Bright4.55
Hi,
ah, okay. Also so würde es jetzt mal zumindest funktionieren:
@staticmethod
def onclick(event):
print(
( event.button,
event.x, event.y, event.xdata, event.ydata))
cid = self.fig.canvas.mpl_connect('button_press_event', self.onclick)
Ausgabe wäre dann:
(<MouseButton.LEFT: 1>, 188, 152, np.float64(3.9722580645161285), np.float64(3.968571428571428))
Was ich nun gerne hätte, dass wenn man einen Punkt (Scatter ) auf meinem Graphen anklickt, dass dann auch diese Koordinate von dem Punkt ausgegeben wird. Also z.B. x = 2 und y = 4.
Es sollten keine Kommazahlen oder so erscheinen

. Der Graph wird per Scatter auch nur mit nichtkommazahlen aufgebaut.
Wäre super, wenn man mir da noch helfen könnte

Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Donnerstag 8. Januar 2026, 06:16
von Sirius3
Du suchst also `round`.
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Donnerstag 8. Januar 2026, 16:04
von DeaD_EyE
Hinweis: round() ist nicht das kaufmännische runden, sondern Wissenschaftliches runden, dass Fehler minimiert.
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Freitag 16. Januar 2026, 20:13
von Bright4.55
Vielen Dank schon mal an alle.
Es hätte soweit nun funtkioniert.
Jetzt hätte ich bloß leider noch ein anderes kleines Problem:
Ich würde gerne auf einen Mausklick von einem User immer warten. Ich habe es schon mit einer while-Schleife probiert, aber leider kommt dann gar keine Ausgabe mehr :/.
Nun wollte ich es mit einem MouseListener probieren:
with mouse.Listener(
on_click=on_click) as listener:
listener.join()
aber leider bekomme ich dann eine Fehlermeldung, dass on_click nicht als Attribut definiert ist, was es ja auch nicht ist. Ich habe es als Funktion in einer Klasse defniert.
Weiß jemand wie man das macht? Und sollte das mit einem Listener funktionieren, dass das Programm an einer Stelle immer solange wartet bis ein Mausklick auf ein Feld erfolgt?
Vielen Dank im Voraus.
Re: Event-Handling Mouse Click mit Matplotplib
Verfasst: Montag 19. Januar 2026, 13:05
von __blackjack__
Wo kommt denn `mouse.Listener` her? So auf die Schnelle finde ich das nicht in der Matplotlib-Dokumentation‽