【发布时间】:2015-01-14 13:08:28
【问题描述】:
有什么方法可以在 Python 2.65、Matplotlib 0.99 中显示 pyplot 图形而不锁定其他所有内容?
我有一个在 Python 2.75 和 Matplotlib 1.3.1 上运行的 Pmw GUI 程序。在 Windows(64 位 Winpython)上。 每次绘制图形(或每次向现有图形添加某些内容)时,例程都会调用 plt.show()。 可以显示 pyplot 图形,同时允许用户继续使用 GUI 和操作图形,没有任何东西会阻塞任何东西,因为我需要用户在决定下一步在 GUI 中做什么时查看图形, 并让多个地块彼此相邻以进行比较。
现在,我需要在使用 Python 2.65 和 Matplotlib 0.99 的系统上完成所有这些工作。现在的行为似乎是除非调用 plt.show() 否则什么都不可见,然后它将阻止所有内容,直到关闭绘图窗口。 我尝试使用 plt.draw() 代替,但后来这个数字甚至没有出现。 更糟糕的是:一些绘制到现有图形的例程永远不会有机会,因为它们在显示图形时无法执行,而当它们可以执行时,图形已经消失了。我不能等到最后一次绘图操作,因为这些图表是为了建立增量,将信息添加到用户需要能够看到的现有图表中。
我不允许更新 matplotlib。如果我将库的非二进制部分作为“我的”软件包的一部分,我就可以使用它们。
理想情况下,我正在寻找可以在我工作的两种环境中工作的代码,但在这一点上我愿意做出妥协......
更新: 我发现一些在同一环境中运行的代码能够完成所有这些事情,我可以在其中删除 plt.show() 调用,甚至在 IDLE 中运行它(根据 matplotlib 文档,这在这些方面存在问题),它“正常工作”——我无法发现这两个代码处理任务的方式有什么区别:两者都定义了一个 figure.axes 对象,将它传递给吸引它们的例程(使用 plt.plot() ) 并将其存储起来以备将来使用。
我还发现,我当前的代码会根据我的运行方式改变它在当前库集上的行为:在 Spyder 的“常规”控制台或系统控制台中,一切都很好,但在专用的在 Spyder 中的控制台,第一个情节将锁定界面
=> 我开始认为这毕竟与 matplotlib 版本无关,但不知道还能去哪里看——根据 matplotlib 的启动方式,还有什么可以改变它的行为吗?
【问题讨论】:
标签: python matplotlib