Pregunta

Estoy haciendo mi primera incursión en la programación de GUI, y estoy tratando de enfrentar con WXPYTHON. Estoy tratando de usar WXGlade, pero está resultando ser un poco erróneo.

Estoy haciendo un diseño con cuadrícula.

He resuelto que cada vez que agrega algo al Sizer, se pone en la siguiente celda. Esto significa que si tiene una celda vacía, debe llenarla con algo. ¿Estoy en lo cierto?

Este es el diseño que busco (captura de pantalla de WXGlade):

wxGlade layout screenshot

El problema es que generar código a partir de eso obtengo esto:

enter image description here

    grid_sizer_1 = wx.GridSizer(3, 3, 0, 0)
    grid_sizer_1.Add(self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
    grid_sizer_1.Add(self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 0)
    grid_sizer_1.Add(self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
    grid_sizer_1.Add(self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL, 0)
    grid_sizer_1.Add(self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
    grid_sizer_1.Add(self.button_right, 0, wx.ALIGN_CENTER_VERTICAL, 0)
    grid_sizer_1.Add(self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)

Aparentemente porque el botón "Down" se coloca en la séptima celda en lugar del octavo.

¿Cuál es la forma estándar de lidiar con esto? ¿Pondrías algún tipo de widget ficticio para llenar la celda vacía? Si es así, ¿qué widget? ¿O estoy usando el tipo incorrecto de Sizer?

¡Gracias!

¿Fue útil?

Solución

Como dijiste ... agregar un widget ficticio (texto estático en blanco) funciona bien. También puede usar addMany () en lugar de múltiples add () 's.

grid_sizer_1 = wx.GridSizer(3, 3, 0, 0)
grid_sizer_1.AddMany( [
  (self.button_last_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
  (self.button_up, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL),
  (self.button_next_page, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
  (self.button_left, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL),
  (self.button_select, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL),
  (self.button_right, 0, wx.ALIGN_CENTER_VERTICAL),
  (wx.StaticText(self, -1, ''), 0, wx.EXPAND),
  (self.button_down, 0, wx.ALIGN_CENTER_HORIZONTAL) ] )

Otros consejos

Estoy más familiarizado con el uso (0,0) lo que significa agregar un tamaño estirable al sizer. Entonces, uno crearía un solo objeto como empty_cell = (0,0) y luego pegar empty_cell En todas partes se necesita ese espacio vacío en su Sizer (donde, por ejemplo, el WX.statictext se usa en la respuesta aceptada).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top