2013-11-21 3 views
1

У меня была такая же проблема, как here.
Это работает, но эта цифра не должна охватывать всю рамку; поэтому я изменил размер и положение его панели. Проблема в том, что моя фигура по-прежнему имеет одинаковую размерность моего кадра, и поэтому я только изменил панель, моя фигура «вырезана». Как я могу это решить?
Пример для лучшего понимания: Моя рамка 800x600, и мой рисунок должен иметь размер 400x300 внутри этого кадра.вставка matplotlib цифра и изменить ее размер

редактировать:

import wx 
from numpy import arange, sin, pi 
import matplotlib 
#matplotlib.use('WXAgg') 

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 
from matplotlib.figure import Figure 

class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 
          "Pyramid App",size=(800,600),pos=((wx.DisplaySize()[0]-800)/2,(wx.DisplaySize()[1]-600)/2),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX) 

     self.PageThree = pageThree(self) 

class pageThree(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent,size=(800,525)) 
     self.myparent=parent 
     self.pageThree=wx.Panel(self,size=(800,525)) # put some elements at this panel 
     self.pylabfigure = wx.Panel(self,size=(440,420),pos=(350,105)) # this is the panel for my figure 
     self.drawPylabFigure() 
     self.draw() 

    def drawPylabFigure(self): 
     self.figure = Figure() 
     self.axes = self.figure.add_subplot(111) 
     self.canvas = FigureCanvas(self.pylabfigure, -1, self.figure) 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) 
     self.SetSizer(self.sizer) 
     self.Fit() 

    def draw(self): 
     #example drawing 
     t = arange(0.0, 3.0, 0.01) 
     s = sin(2 * pi * t) 
     self.axes.plot(t, s) 

if __name__ == "__main__": 
    app = wx.App() 
    MainFrame().Show() 
    app.MainLoop() 
+0

pls.show некоторый код – joaquin

+0

извините, я отредактирован. – Munchkin

ответ

1

Это даст вам представление о том, как это сделать. Главное, чтобы учесть это, чтобы ваши панели/холсты были организованы одним sizer. Кроме того, если холст должен заполнить его бок, нет необходимости помещать его в панель.

import wx 
from numpy import arange, sin, pi 
import matplotlib 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FCW 
from matplotlib.figure import Figure 

class MainFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 
          "Pyramid App",size=(800,600), 
          pos=((wx.DisplaySize()[0]-800)/2,(wx.DisplaySize()[1]-600)/2), 
          style=wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX) 

     self.PageThree = pageThree(self) 

class pageThree(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent,size=(800,525)) 
     self.myparent=parent 
     self.pageThree=wx.Panel(self, size=(500,525)) 
     self.drawPyFigure() 
     self.draw() 

    def drawPyFigure(self): 
     self.figure = Figure() 
     self.axes = self.figure.add_subplot(111) 
     self.canvas = FCW(self, -1, self.figure) 
     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(self.pageThree, 0) 
     sizer.Add(self.canvas, 1, wx.EXPAND) 
     self.SetSizer(sizer) 
     self.Fit() 

    def draw(self): 
     t = arange(0.0, 3.0, 0.01) 
     s = sin(2 * pi * t) 
     self.axes.plot(t, s) 

if __name__ == "__main__": 
    app = wx.App() 
    MainFrame().Show() 
    app.MainLoop() 

enter image description here

0

В двух словах, вы хотите self.figure = Figure(figsize=(400/80.0, 300/80.0)).

Необходимо указать размер рисунка (по умолчанию 8 дюймов в ширину и 6 дюймов в высоту) и/или dpi на чертеже (по умолчанию для отображения на экране 80).

Однако имейте в виду, что размер рисунка на экране зависит исключительно от общего количества пикселей (другими словами, width_inches*dpi x height_inches*dpi). По этой причине, если мы хотим, чтобы фигура представляла собой определенное количество пикселей, нам нужно преобразовать ее в «дюймы» (которые не имеют ничего общего с размером отображения фигуры, если она отображается на экране), деля количество пикселей по рисункам.

+0

Вы протестировали его? Когда я изменяю эту строку, которую вы опубликовали, ничего не меняется. Я тестирую его с несколькими параметрами, но мое изображение всегда выглядит одинаково. – Munchkin