【发布时间】:2019-05-15 17:30:33
【问题描述】:
我正在编写一个程序,用户可以在其中交互式地修改绘图。我正在使用 3 个 mpl_connect 函数 (key_press_event button_press_event button_release_event) 加上 4 个文本框 (mwidgets.TextBox)。
每次我在文本框中输入文本时,这个过程很慢,我认为这是因为当我在文本框上单击和书写时,它不必要地触发了 3 个“mpl 连接”( key_press_eventbutton_press_eventbutton_release_event)。
3 个文本框在“轴对象”之外,所以我想知道是否有办法将“mpl 连接”限制在感兴趣的轴内。也就是说,而不是编写以下代码:
cid1 = figure.canvas.mpl_connect('key_press_event', onPressKey)
cid2 = figure.canvas.mpl_connect('button_press_event', onPressButton)
cid3 = figure.canvas.mpl_connect('button_release_event', onReleaseButton)
编写类似的代码(注意将canvas 替换为axes):
cid1 = figure.axes.mpl_connect('key_press_event', onPressKey)
cid2 = figure.axes.mpl_connect('button_press_event', onPressButton)
cid3 = figure.axes.mpl_connect('button_release_event', onReleaseButton)
有什么解决方法吗?
欢迎评论!
【问题讨论】:
-
据我所知这是不可能的,但您没有提供函数
onPressKey和其他函数的代码。你能测试一下哪个 Axes 对象触发了这个事件,如果不是正在绘制的,就立即返回? -
您写道您“认为这是因为当我单击并在文本框上书写时,它会不必要地触发 3 个“mpl 连接”get_active() 方法来确定输入应该进入 TextBox 还是画布?
-
@DizietAsahi - 函数
onPressKey、onPressButton、onReleaseButton只是返回按下的键盘键或鼠标键的值,实际上是立即返回。 @Asmus - 是的,正如你所说,我验证了它。当我在文本框中输入时,onPressKey函数正在打印每个输入的字符,这是不必要的,因为当我将鼠标悬停在包含绘图的轴上时,我只使用按下的键盘键的值。跨度>
标签: python performance matplotlib widget interactive