Revision: 3765
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3765&view=rev
Author: mdboom
Date: 2007年08月31日 12:25:34 -0700 (2007年8月31日)
Log Message:
-----------
Render all the fonts in each mathtext expression to a single image buffer
(memory and time savings).
Add support for getting raw image data for mathtext expressions.
Add mathtext_wx.py example showing how to put mathtext expressions
into controls.
Added Paths:
-----------
trunk/matplotlib/examples/mathtext_wx.py
Added: trunk/matplotlib/examples/mathtext_wx.py
===================================================================
--- trunk/matplotlib/examples/mathtext_wx.py (rev 0)
+++ trunk/matplotlib/examples/mathtext_wx.py 2007年08月31日 19:25:34 UTC (rev 3765)
@@ -0,0 +1,124 @@
+"""
+Demonstrates how to convert mathtext to a wx.Bitmap for display in various
+controls on wxPython.
+"""
+
+import matplotlib
+matplotlib.use("WxAgg")
+from matplotlib.numerix import arange, sin, pi, cos, log
+from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
+from matplotlib.backends.backend_wx import NavigationToolbar2Wx
+from matplotlib.figure import Figure
+
+import wx
+
+IS_GTK = 'wxGTK' in wx.PlatformInfo
+IS_WIN = 'wxMSW' in wx.PlatformInfo
+IS_MAC = 'wxMac' in wx.PlatformInfo
+
+############################################################
+# This is where the "magic" happens.
+from matplotlib.mathtext import MathTextParser
+mathtext_parser = MathTextParser("Bitmap")
+def mathtext_to_wxbitmap(s):
+ ftimage = mathtext_parser.parse(s, 150)
+ return wx.BitmapFromBufferRGBA(
+ ftimage.get_width(), ftimage.get_height(),
+ ftimage.as_rgba_str())
+############################################################
+
+functions = [
+ (r'$\sin(2 \pi x)$' , lambda x: sin(2*pi*x)),
+ (r'$\frac{4}{3}\pi x^3$' , lambda x: (4.0 / 3.0) * pi * x**3),
+ (r'$\cos(2 \pi x)$' , lambda x: cos(2*pi*x)),
+ (r'$\log x$' , lambda x: log(x))
+]
+
+class CanvasFrame(wx.Frame):
+ def __init__(self, parent, title):
+ wx.Frame.__init__(self, parent, -1, title, size=(550, 350))
+ self.SetBackgroundColour(wx.NamedColor("WHITE"))
+
+ self.figure = Figure()
+ self.axes = self.figure.add_subplot(111)
+ self.change_plot(0)
+
+ self.canvas = FigureCanvas(self, -1, self.figure)
+
+ self.sizer = wx.BoxSizer(wx.VERTICAL)
+ self.add_buttonbar()
+ self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
+ self.add_toolbar() # comment this out for no toolbar
+
+ menuBar = wx.MenuBar()
+
+ # File Menu
+ menu = wx.Menu()
+ menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample")
+ menuBar.Append(menu, "&File")
+
+ if IS_GTK or IS_WIN:
+ # Equation Menu
+ menu = wx.Menu()
+ for i, (mt, func) in enumerate(functions):
+ bm = mathtext_to_wxbitmap(mt)
+ item = wx.MenuItem(menu, 1000 + i, "")
+ item.SetBitmap(bm)
+ menu.AppendItem(item)
+ self.Bind(wx.EVT_MENU, self.OnChangePlot, item)
+ menuBar.Append(menu, "&Functions")
+
+ self.SetMenuBar(menuBar)
+
+ self.SetSizer(self.sizer)
+ self.Fit()
+
+ def add_buttonbar(self):
+ self.button_bar = wx.Panel(self)
+ self.button_bar_sizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.sizer.Add(self.button_bar, 0, wx.LEFT | wx.TOP | wx.GROW)
+
+ for i, (mt, func) in enumerate(functions):
+ bm = mathtext_to_wxbitmap(mt)
+ button = wx.BitmapButton(self.button_bar, 1000 + i, bm)
+ self.button_bar_sizer.Add(button, 1, wx.GROW)
+ self.Bind(wx.EVT_BUTTON, self.OnChangePlot, button)
+
+ self.button_bar.SetSizer(self.button_bar_sizer)
+
+ def add_toolbar(self):
+ """Copied verbatim from embedding_wx2.py"""
+ self.toolbar = NavigationToolbar2Wx(self.canvas)
+ self.toolbar.Realize()
+ if IS_MAC:
+ self.SetToolBar(self.toolbar)
+ else:
+ tw, th = self.toolbar.GetSizeTuple()
+ fw, fh = self.canvas.GetSizeTuple()
+ self.toolbar.SetSize(wx.Size(fw, th))
+ self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
+ self.toolbar.update()
+
+ def OnPaint(self, event):
+ self.canvas.draw()
+
+ def OnChangePlot(self, event):
+ self.change_plot(event.GetId() - 1000)
+
+ def change_plot(self, plot_number):
+ t = arange(1.0,3.0,0.01)
+ s = functions[plot_number][1](t)
+ self.axes.clear()
+ self.axes.plot(t, s)
+ self.Refresh()
+
+class MyApp(wx.App):
+ def OnInit(self):
+ frame = CanvasFrame(None, "wxPython mathtext demo app")
+ self.SetTopWindow(frame)
+ frame.Show(True)
+ return True
+
+app = MyApp()
+app.MainLoop()
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.