I'm trying to bind CTRL + Right click to a matplotlib FigureCanvasTkAgg. So far, I used mpl_connect to change the state of a ctrl variable when the key is pressed and then checked if it was True when the user clicks on the figure. I was wondering if there was a way to do the same thing without having to use this "workaround". The list of event connections doesn't appear to handle compound events.
import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
ctrl = False
def ctrlpressed(event):
global ctrl
if event.key == 'control':
ctrl = True
def ctrlreleased(event):
global ctrl
if event.key == 'control':
ctrl = False
def scrolled(event):
if ctrl and event.button == 3:
print(f'({event.xdata}, {event.ydata})')
root = tk.Tk()
root.geometry("600x800")
fig, ax = plt.subplots(facecolor="w")
ax.plot([1, 2], [1, 2], '-o')
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
canvas.mpl_connect('key_press_event', ctrlpressed)
canvas.mpl_connect('key_release_event', ctrlreleased)
canvas.mpl_connect('button_press_event', scrolled)
root.mainloop()
event.keyinsidescrolled()?