2013-04-10 55 views
1

这个python程序在wxpython窗口中绘制一个图形。wxpython + matplotlib:自动调整matplotlib的图形

如何更改程序,以便:

  • 当我调整
  • 主窗口不能超过特定的尺寸调整大小小窗口中的人物重新调整? (比如窗口的默认大小的一半)

# adapted from: 
# http://wiki.wxpython.org/Getting%20Started 
# http://www.cs.colorado.edu/~kena/classes/5448/s11/presentations/pearse.pdf 

import wx 
import pylab as pl 
import matplotlib 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 

class GUIPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.parent = parent 

     # create some sizers 
     sizer = wx.BoxSizer(wx.VERTICAL) 

     # A button 
     self.button =wx.Button(self, label="Tada!") 
     self.Bind(wx.EVT_BUTTON, self.OnClick,self.button) 

     # put up a figure 
     self.figure = pl.figure() 
     self.axes = self.drawplot(self.figure) 
     self.canvas = FigureCanvas(self, -1, self.figure) 

     sizer.Add(self.canvas, 0, wx.ALIGN_CENTER|wx.ALL) 
     sizer.Add(self.button, 0, wx.ALIGN_CENTER|wx.ALL) 

     self.SetSizerAndFit(sizer) 
    def log(self, fmt, *args): 
     print (fmt % args) 
    def OnClick(self,event): 
     self.log("button clicked, id#%d\n", event.GetId()) 
    def drawplot(self, fig): 
     ax = fig.add_subplot(1,1,1) 
     t = pl.arange(0,1,0.001) 
     ax.plot(t,t*t) 
     ax.grid() 
     return ax 

app = wx.App(False) 
frame = wx.Frame(None) 
panel = GUIPanel(frame) 
frame.Fit() 
frame.Center() 
frame.Show() 
app.MainLoop() 
+0

确实在您的其他问题的光这种变化? – tacaswell 2013-04-11 05:04:07

+0

没有。 [GRATUITOUSIT用词填充字符] – 2013-04-11 05:10:14

回答

2

1)修改您设置您的分级机的方式是:

sizer.Add(self.canvas, 1, wx.EXPAND | wx.ALL) 

这里是method reference。安装和使用wxPython Demo也很有帮助。 Sizer在那里很好地覆盖。 BTW:wx.ALL是无用的,除非你指定边框。


2)而frame.Show()后添加到您的框架设置:

size = frame.GetSize() 
frame.SetMinSize((size[0]/2, size[1]/2))