2016-05-07 2 views
0

Я пытаюсь выровнять флажки и холст matplotlib в рамке wx.Выравнивание по wxpython

  • мне нужно эти флажки, чтобы быть выровнены в левой стороне и холст на правой стороне
  • ниже код не выравнивая их правильно

кто-нибудь может предложить изменения должны быть сделаны в коде?

  • Если я хочу добавить еще один холст в том же фрейме, как я могу его добавить?

    import wx 
    import matplotlib.pyplot as plt 
    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
    
    class canvasFrame(wx.Frame): 
        def __init__(self,parent,id): 
         wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400)) 
    
         self.fig = plt.Figure(figsize=(15,5)) 
         self.ax1 = self.fig.add_subplot(1,1,1) 
         self.canvas = FigureCanvas(self, -1, self.fig) 
    
         b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1)) 
         b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1)) 
    
         b1sizer = wx.BoxSizer(wx.VERTICAL) 
         b2sizer = wx.BoxSizer(wx.VERTICAL) 
         canvSizer = wx.BoxSizer(wx.HORIZONTAL) 
    
         b1sizer.Add(b1,0,wx.ALL,5) 
         b2sizer.Add(b2,0,wx.ALL,5) 
         canvSizer.Add(self.canvas,wx.TOP | wx.EXPAND,5) 
    
    if __name__ == "__main__": 
        app = wx.App() 
        frame = canvasFrame(parent=None,id = -1) 
        frame.Show() 
        app.MainLoop() 
    
+0

Как насчет добавления одного холста под другим? – vinaykp

ответ

2

вам не хватает много деталей о том, как работать клеильные ... Я бы очень рекомендовал пересматриваю документацию и прибегая к помощи учебникам

class canvasFrame(wx.Frame): 
    def __init__(self,parent,id): 
     wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400)) 

     self.fig = plt.Figure(figsize=(15,5)) 
     self.ax1 = self.fig.add_subplot(1,1,1) 
     self.canvas = FigureCanvas(self, -1, self.fig) 

     b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1)) 
     b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1)) 
     # first create your sizer for your checkboxes 
     checkbox_sizer = wx.BoxSizer(wx.VERTICAL) 
     checkbox_sizer.AddMany([b1,b2]) # add both buttons to the sizer 
     #next create the main sizer 
     main_sizer = wx.BoxSizer(wx.HORIZONTAL) 
     #add the checkbox sizer to the main_sizer 
     main_sizer.Add(checkbox_sizer) 
     # add the canvas to the main sizer 
     main_sizer.Add(self.canvas) 
     #Set the sizer as the sizer for the frame 
     self.SetSizer(main_sizer) 
     #call layout for the sizers to layout their elements 
     self.Layout() 
     #call fit to make the frame fit its contents 
     self.Fit() 
+0

поблагодарить вас очень много Joran Beasley.Спасибо за ваши предложения – vinaykp

2

Вы используете классификаторы неправильно, попробуйте следующее:

import wx 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 

class canvasFrame(wx.Frame): 
    def __init__(self,parent,id): 
     wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400)) 

     self.fig = plt.Figure(figsize=(15,5)) 
     self.ax1 = self.fig.add_subplot(1,1,1) 
     self.canvas = FigureCanvas(self, -1, self.fig) 

     b1 = wx.CheckBox(self,-1,"Apples", size=(160,-1)) 
     b2 = wx.CheckBox(self,-1,"Mango", size=(160,-1)) 

     mainsizer = wx.BoxSizer(wx.HORIZONTAL) # Main sizer 
     cbsizer = wx.BoxSizer(wx.VERTICAL) # Checkbox sizer 
     canvassizer = wx.BoxSizer(wx.VERTICAL) # Canvas sizer 

     # Add checkbox 
     cbsizer.Add(b1, 0, wx.ALIGN_LEFT|wx.ALL, 5) 
     cbsizer.Add(b2, 0, wx.ALIGN_LEFT|wx.ALL, 5) 

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

     # Add "secondary" sizers to main sizer 
     mainsizer.Add(cbsizer, 1, wx.EXPAND|wx.ALL, 2) 
     mainsizer.Add(canvassizer, 3, wx.EXPAND|wx.ALL, 2) 

     self.SetSizer(mainsizer) 


if __name__ == "__main__": 
    app = wx.App() 
    frame = canvasFrame(parent=None,id = -1) 
    frame.Show() 
    app.MainLoop() 

Теперь о последнем вопросе, я думаю, что вы бы добавить сюжетные (осей) instea d другой холст, то есть

self.fig = plt.Figure(figsize=(15,5)) 
self.ax1 = self.fig.add_subplot(1,2,1) 
self.ax2 = self.fig.add_subplot(1,2,2) 
self.canvas = FigureCanvas(self, -1, self.fig) 
+0

отличный ответ :) вы вошли в более подробные сведения, чем я ... но мне любопытно, почему у вас есть отдельный сизер для холста, а не просто добавление его в mainsizer (на описание OP нет необходимости в еще одном sizer. (Честно говоря, я думаю, что что-то вроде GridBagSizer будет работать лучше всего для OP) –

+0

приятно, спасибо большое .. Jorge De Los Santos – vinaykp

+0

@ JoranBeasley, я думаю, это было для вопроса с несколькими холстами (я остался с этой идеей xD), но, конечно, с одним холстом нет необходимости в сборщике. С уважением. –

Смежные вопросы