2011-01-15 12 views
6

Estoy usando un gridbagsizer para colocar dos paneles dentro de un marco.Colocación de elementos (paneles) dentro de un wx.GridBagSizer

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) 
main_panel = wx.Panel(self, id=ID_MAIN_PANEL) 

frame_sizer = wx.GridBagSizer(1, 1) 
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) 
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND) 
frame_sizer.AddGrowableRow(0) 
frame_sizer.AddGrowableCol(0) 
self.SetSizer(frame_sizer) 

Quiero que el panel de control esté sobre el panel principal (como se puede ver arriba). Sin embargo, esta es la salida me sale:

alt text

No sé por qué el panel superior es mucho más grande que el panel inferior, cuando he especificado lo contrario. (2, 5) para la parte superior y (5, 5) para la parte inferior. También tiene un comportamiento extraño cuando lo cambio de tamaño más pequeño, básicamente me da lo que quiero (ver imagen a continuación), pero no sé cómo mantener la proporción cuando lo hago más grande de nuevo.

alt text

Sin embargo cuando se inicia el cambio de tamaño más grande (incluso por una pequeña cantidad) se puede ver (debajo) de la formas y relación de cambio de forma espectacular en la otra dirección (con la parte inferior llegando a ser mucho más pequeño y la parte superior mucho más grande)

alt text

Aún tratando de aprender esta medidores y realmente no puede encontrar este problema con alguno de los ejemplos que he visto. También intenté experimentar con todos los parámetros y hacer algunas pruebas y no puedo entender qué está pasando aquí. Cualquier ayuda sería muy apreciada.

EDITAR: La imagen que se encuentra debajo agregaron para ayudar a los comentarios a continuación. alt text

Respuesta

2

Personalmente, usaría un BoxSizer en orientación VERTICAL. Aquí hay un ejemplo simple:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     control_panel = wx.Panel(panel) 
     control_panel.SetBackgroundColour("Yellow") 
     main_panel = wx.Panel(panel) 
     main_panel.SetBackgroundColour("Blue") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(control_panel, 3, wx.EXPAND) 
     sizer.Add(main_panel, 1, wx.EXPAND) 
     panel.SetSizer(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MyForm().Show() 
    app.MainLoop() 

Cambié el color de fondo de cada panel para que sea más fácil saber cuál es cuál. Tenga en cuenta que me dio el panel de control de una proporción de 3 y el panel principal una proporción de 1. Es posible que desee echar un vistazo a la Herramienta de Inspección Widget así como para ayudar a visualizar que:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

+0

¿Puedo seguir usando SetMaxSize con esto?Quiero que el panel superior permanezca del mismo tamaño (en y, pero expandible a través de x) pero que el panel inferior se expanda (en x e y). – johnharris85

+0

No estoy seguro ... es posible que pueda obtenerlo usando los clasificadores anidados para el panel superior, pero no sé. –

1

De las siete filas y las cinco columnas de la cuadrícula, especificó solo la primera fila y la primera columna que se pueden cultivar.

El panel de control ocupa la primera fila, por lo que se expande para ocupar el espacio disponible.

El indicador wx.EXPAND solo tiene un efecto si la celda está en una fila o columna creíble.

+0

Gracias, He agregado Growable a todas las filas y columnas y se ve mucho mejor, sin embargo, en realidad, quiero que el panel superior se expanda a un cierto tamaño y luego se detenga. Pero la ventana inferior puede seguir creciendo en cuanto a tamaño. es posible? – johnharris85

+0

Intente usar SetMaxSize para limitar la altura del panel de control. También puede fijar la altura del panel de control (con SetSize) y no hacer que las filas que ocupa puedan crecer. O puede jugar con proporciones alterando la cantidad de filas cultivables que abarca cada uno de estos dos paneles. –

+0

Agregué control_panel.SetMaxSize (wx.Size (150, 300)) pero no parece haber hecho nada, aún puedo expandirlo a cualquier parte. Además (y esto sucedió después de hacer crecer todas las filas/columnas) hay un espacio extraño que aparece en los bordes del marco cuando se cambia de tamaño a ciertas formas (he añadido una imagen extra de esto arriba). – johnharris85

Cuestiones relacionadas