wxPython GridSizer - работа с пустыми ячейками

Я делаю свой первый набег на программирование GUI, и я пытаюсь справиться с wxPython. Я пытаюсь использовать wxGlade, но он немного глючит.

Я делаю макет с помощью GridSizer.

Я понял, что каждый раз, когда вы добавляете что-то в классификатор, оно помещается в следующую ячейку. Это означает, что если у вас есть пустая ячейка, вам нужно заполнить ее чем-нибудь. Я прав?

Это макет, к которому я иду (скриншот wxGlade):

Скриншот макета wxGlade

Проблема в том, что генерируя код, я получаю это:

    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)

Кажется, потому что кнопка "Вниз" помещается в 7-ю ячейку вместо 8-й.

Какой стандартный способ борьбы с этим? Вы бы поместили какой-нибудь фиктивный виджет, чтобы заполнить пустую ячейку? Если да, то какой виджет? Или я использую не тот тип сортировщика?

Спасибо!

2 ответа

Решение

Как вы сказали... добавление фиктивного виджета (пустой статический текст) работает хорошо. Вы также можете использовать AddMany() вместо нескольких add().

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) ] )

Я более знаком с использованием (0,0) что означает добавить растяжимый размер к классификатору. Таким образом, можно создать один объект, как empty_cell = (0,0) а затем придерживаться empty_cell везде, где пустое место необходимо в вашем классификаторе (где, например, wx.StaticText используется в принятом ответе).

Другие вопросы по тегам