wxPython GUI:将gnuplot迁移到matplotlib

时间:2010-02-02 17:36:17

标签: python wxpython matplotlib

我目前有一个内置于wxPython的GUI,其中有几个部分,其中一个部分显示了一个情节的.png图像:

self.plot = wx.BitmapButton(self.pane_system, -1, wx.Bitmap("/home/myname/projects/newton/plot/src/graph.png", wx.BITMAP_TYPE_ANY))

在GUI的另一部分,我可以编辑参数。当前设置是当我更改参数并按Enter键时,代码告诉Gnuplot重新绘制并将新绘图保存到graph.png文件,然后更新GUI以显示更新的图像。

我有几个一般性问题:

  • 我想将gnuplot迁移到matplotlib,原因如下:如果我使用gnuplot,运行可执行文件的计算机必须在其计算机上安装gnuplot。另一方面,matplotlib是一个python模块,所以我不必担心在其他机器上安装图形包。这个假设是否正确?

  • 如何修改我的wxPython GUI窗口以显示matplotlib图?我找到了一些教程,告诉我如何创建一个带有matplotlib图的新面板,但我想简单地将它显示在旧图的位置。我想我可以让matplotlib将绘图保存到图像文件,就像我在gnuplot中一样。将绘图保存为图像并更新GUI通常是一个好主意,还是有其他(更快)的最佳实践来更新绘图?使用图像文件的一个缺点(如上面的代码所示)是,当我调整GUI窗口大小时,它们不会调整大小。

  • 如果我把它打包成可执行文件,我是否必须在Windows机器上安装wxPython / Python才能运行可执行文件?

1 个答案:

答案 0 :(得分:2)

按顺序提出问题:

1。)是的,matplotlib是一个包含的python模块。它确实有外部依赖,但在Windows中,这些依赖项与matplotlib安装一起打包。在其他机器上安装时,您是否需要担心这些问题?这取决于您的安装方式。你打包到exe吗?让最终用户安装Python和matplotlib?作为示例,您可以使用py2exe将matplotlib打包到您的exe中,请参阅here。当然,您必须为后端自定义这些脚本,wx。

2。)你看到带有图的面板,因为matplotlib提供了FigureCanvasWxAgg,这是一个wxWidget派生自wxPanel,与matplotlib一起玩得很好。使用它的好处是你can set handlers for stuff like resize and painting.

你的wxBitMapButton虽然正在寻找图片的wxBitmap。您可能能够为matplotlib绘图提供文件句柄(cStringIO.StringIO),并且无需将文件写入磁盘。您也可以挂钩它的resize事件并获取matplotlib以将图形重绘为适当的大小。使用FigureCanvasWxAgg不会有足够的灵活性。但是,我不能研究这些,因为看起来wxPython网站已经关闭了。

3.。)您可以将wxPython打包成可执行文件。如何取决于您使用的打包机。我已经多次用py2exe完成了这个。