Habe es jetzt hinbekommen (Das der der Button mein Tooltip hinzufügt und beim nochmal klicken wird es ausgeblendet). @Sirius3 der Teil, bei dem ich Hilfe brauche steht doch da schon.
Ich würde jetzt nur noch gern die anderen Funktionen (wie z.B. Zoom und Pan disablen, wenn man auf den Button drückt)
Code sieht jetzt so aus:
Code: Alles auswählen
matplotlib.rcParams["toolbar"] = "toolmanager"
from matplotlib.backend_tools import ToolBase, ToolToggleBase
class Tooltip(ToolToggleBase):
image = r"D:\path\toggle_tooltip.png"
description = "Show Tooltip"
default_toggle = True
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def enable(self, *args):
self.set_tooltip_visibility(True)
self.set_tooltip_connection("add")
self.release_rest()
def disable(self, *args):
self.cursor.remove()
def set_tooltip_visibility(self, state):
self.cursor = mplcursors.cursor(hover=state)
def set_tooltip_connection(self, state):
self.cursor.connect(state, self.show_annotation)
def release_rest(self):
self.ToolPan(self._cancel_action())
self.ToolZoom(self._cancel_action())
#Code der nicht klappt
#if 'Pan' in self.wx_ids.keys():
# self.ToolToggleBase(self.wx_ids['Pan'], False)
#if 'Zoom' in self.wx_ids.keys():
# self.ToggleTool(self.wx_ids['Zoom'], False)
Im Moment stürtzt mein IDE ab, sobald ich auf den Button drücke, was an der Funktion release_rest liegt bzw. an den zwei Testzeilen, die noch nicht stimmen. Ich habe mal in die backend_tools.py reingeschaut, kriege es aber grad noch nicht richtig zusammengebastelt.
Beispiel aus backend_tools.py:
Code: Alles auswählen
class ToolPan(ZoomPanBase):
"""Pan axes with left mouse, zoom with right"""
default_keymap = rcParams['keymap.pan']
description = 'Pan axes with left mouse, zoom with right'
image = 'move'
cursor = cursors.MOVE
radio_group = 'default'
def __init__(self, *args):
ZoomPanBase.__init__(self, *args)
self._idDrag = None
def _cancel_action(self):
self._button_pressed = None
self._xypress = []
self.figure.canvas.mpl_disconnect(self._idDrag)
self.toolmanager.messagelock.release(self)
self.toolmanager.get_tool(_views_positions).refresh_locators()
def _press(self, event):
if event.button == 1:
self._button_pressed = 1
elif event.button == 3:
self._button_pressed = 3
else:
self._cancel_action()
return
x, y = event.x, event.y
self._xypress = []
for i, a in enumerate(self.figure.get_axes()):
if (x is not None and y is not None and a.in_axes(event) and
a.get_navigate() and a.can_pan()):
a.start_pan(x, y, event.button)
self._xypress.append((a, i))
self.toolmanager.messagelock(self)
self._idDrag = self.figure.canvas.mpl_connect(
'motion_notify_event', self._mouse_move)
def _release(self, event):
if self._button_pressed is None:
self._cancel_action()
return
self.figure.canvas.mpl_disconnect(self._idDrag)
self.toolmanager.messagelock.release(self)
for a, _ind in self._xypress:
a.end_pan()
if not self._xypress:
self._cancel_action()
return
self.toolmanager.get_tool(_views_positions).push_current()
self._cancel_action()
def _mouse_move(self, event):
for a, _ind in self._xypress:
# safer to use the recorded button at the _press than current
# button: # multiple button can get pressed during motion...
a.drag_pan(self._button_pressed, event.key, event.x, event.y)
self.toolmanager.canvas.draw_idle()