问题
I have a matplotlib and I have created a button_press_event
like this:
self.fig.canvas.mpl_connect('button_press_event', self.onClick)
def onClick(self, event)
if event.button == 1:
# draw some artists on left click
elif event.button == 2:
# draw a vertical line on the mouse x location on wheel click
elif event.button == 3:
# clear artists on right click
Now is it possible to modify the wheel click handler to something like this
elif event.button == 2 or (event.button == 1 and event.key == "shift"):
# draw a vertical line on the mouse x location
# on wheel click or on shift+left click
# (alternative way if there is no wheel for example)
It seems that button_press_event
doesn't support keys and key_press_event
doesn't support mouse button clicks, but I'm not sure.
Is there a way?
回答1:
You can also bind a key press and key release events and do something like:
self.fig.canvas.mpl_connect('key_press_event', self.on_key_press)
self.fig.canvas.mpl_connect('key_release_event', self.on_key_release)
...
def on_key_press(self, event):
if event.key == 'shift':
self.shift_is_held = True
def on_key_release(self, event):
if event.key == 'shift':
self.shift_is_held = False
Then you can check in your onClick
function if self.shift_is_held
.
if event.button == 3:
if self.shift_is_held:
do_something()
else:
do_something_else()
回答2:
If you are on Qt then you can simply use:
def onClick(self, event)
# queries the pressed modifier keys
mods = QGuiApplication.queryKeyboardModifiers()
if event.button == 1 and mods == Qt.ShiftModifier:
# do something when shift-clicking
来源:https://stackoverflow.com/questions/18141069/matplotlib-how-to-pick-up-shift-click-on-figure