我有一个python程序,其中有几个matplotlib画布嵌入到wxpython应用程序中。其中一幅画有许多十字架。当用户右键单击此画布时,应该删除最近的十字架以及属于此十字架的所有内容(它们通过唯一的id-tag链接,并且每个画布中可能存在应删除的内容)。我希望删除(或实际上重新绘制)尽可能快。该程序非常大,所以我使用了几个线程等。
实现这一点最简单的方法是为每个画布使用wx.CallAfter(canvas.draw)
。但是,右键单击和每个画布的刷新之间存在延迟,因此我认为canvas.draw()
太慢了。
我看到了另外两个用于快速重绘的函数:matplotlib函数blit()
和draw_artist()
。据我所知,blit()
刷新某些区域内的更改像素(我使用了轴bbox)。我设法让它与blit()
一起使用,因为程序在没有崩溃的情况下运行......但没有更新你在屏幕上看到的内容。
删除像素时未设法让draw_artist()
工作(尝试使用第一个line.remove()
,然后使用draw_artist(line)
,但该行已经死亡,因此draw_artist无效。)< / p>
注意:我使用blit()
拨打了draw_artist()
和wx.CallAfter()
!
我的感觉是blit()
是最好的解决方案,但我没有设法让它更新到“屏幕级别”。所以我的问题是:从matplotlib.canvases(嵌入到wxPython)中删除艺术家的最快和最节省资源的方法是什么,而不需要重绘超过你需要,但仍然让更改传播到屏幕?