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.