我在交互式Matplotlib图中使用了一个光标小部件,如下所示:
cursor = Cursor(ax1, useblit=True, color='red', linewidth=1)
cid = fig.canvas.mpl_connect('button_press_event', on_click)
运作良好。 on_click
函数获取x,y点击位置并进行一些补充绘图。基本的东西。
当我激活缩放工具时,我也在捕捉点击。是否有必要将激活和取消激活关键笔划绑定到RectangleSelector示例的窗口小部件,或者是否存在知道工具栏项状态的方法?
RectangleSelector示例中选择器打开/关闭的示例:
def toggle_selector(event):
if event.key in ['Q','q'] and toggle_selector.RS.active:
toggle_selector.RS.set_active(False)
if event.key in ['A', 'a'] and not toggle_selector.RS.active:
toggle_selector.RS.set_active(True)
答案 0 :(得分:8)
这不是公开状态,但您可以查看
fig.canvas.manager.toolbar._active is None
如果工具栏没有尝试抓取点击次数(通过平移或缩放),则为True
。
您正在接触并触及可随时更改的内部状态,因此使用此风险需要您自担风险。开发人员对于更改以_*
开头并且没有弃用期的任何内容都没有任何意见。
答案 1 :(得分:1)
由于toolmanager
工具栏现在可用于更多后端,因此在这里可能很有用。
import matplotlib.pyplot as plt
plt.rcParams['toolbar'] = 'toolmanager'
fig, ax = plt.subplots()
def on_click(evt):
state = fig.canvas.manager.toolbar.toolmanager.active_toggle["default"]
if state is None:
print("no tool selected")
else:
print(f"{state} selected")
cid = fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
答案 2 :(得分:1)
由于accepted answer,this commit在matplotlib版本3.3中不再起作用。使用标准NavigationToolbar2
时,可以使用其mode
属性。
类似于ImportanceOfBeingErnest's answer的示例:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
def on_click(evt):
state = fig.canvas.manager.toolbar.mode
if state == '':
print("no tool selected")
else:
print(f"{state} selected")
cid = fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()