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.
Event-Handling Mouse Click mit Matplotplib
- DeaD_EyE
- User
- Beiträge: 1307
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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
>>>
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
-
Bright4.55
- User
- Beiträge: 6
- Registriert: Mittwoch 26. November 2025, 10:31
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?
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?
- __blackjack__
- User
- Beiträge: 14257
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
Edit: Alternativ könnte man eine `staticmethod()` daraus machen, falls das tatsächlich keine echte Methode sein soll/muss.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
-
Bright4.55
- User
- Beiträge: 6
- Registriert: Mittwoch 26. November 2025, 10:31
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
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
Wäre super, wenn man mir da noch helfen könnte
