2009-08-14 7 views
10

Tengo varios botones en varios tamaños y se expanden de la manera que yo quiero. Sin embargo, cuando agrego el elemento principal a un nuevo wx.BoxSizer que se utiliza para agregar un borde alrededor de todos los elementos en el marco, el tamaño que se ha agregado funciona correctamente de forma vertical, pero no horizontal.wxPython: los elementos en BoxSizer no se expanden horizontalmente, solo verticalmente

El código siguiente muestra el problema:

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

Al comentar las líneas y y líneas descomentando y elimina la BoxSizer extra y muestra cómo espero que todo funcione (sin espacios en blanco, por supuesto).

Estoy completamente atascado con este problema y todavía no tengo ni idea de cómo solucionarlo.

Respuesta

24

En primer lugar, está pasando algunas banderas incorrectamente. BoxSizer toma wx.HORIZONTAL o wx.VERTICAL, no wx.EXPAND. sizer.Add no toma wx.HORIZONTAL.

Si tiene un BoxSizer VERTICAL, wx.EXPAND hará que el control se llene horizontalmente, mientras que una proporción de 1 o más (segundo argumento para Agregar) hará que el control se llene verticalmente. Es lo opuesto para HORIZONTAL BoxSizers.

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

widget1 se expandirá horizontalmente. widget2 se expandirá verticalmente.

Si coloca un clasificador en otro clasificador, debe asegurarse de tener su proporción y los marcadores EXPAND establecidos para que su interior crezca como desee.

Dejaré el resto para ti.

Cuestiones relacionadas