wxpython gridsizer - Работа с пустыми клетками
-
27-10-2019 - |
Вопрос
Я делаю свой первый набег на программирование графического интерфейса, и я пытаюсь справиться с Wxpython. Я пытаюсь использовать wxglade, но он оказался немного глюми.
Я делаю макет с помощью Gridsizer.
Я выяснил, что каждый раз, когда вы добавляете что -то в Sizer, оно помещается в следующую ячейку. Это означает, что если у вас есть пустая ячейка, вам нужно что -то заполнить. Я прав?
Это макет, на который я ищу (скриншот 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 -го.
Каков стандартный способ справиться с этим? Вы бы поместили какой -то фиктивный виджет, чтобы заполнить пустую ячейку? Если да, то какой виджет? Или я использую неправильный вид sizer?
Спасибо!
Решение
Как вы сказали ... добавление фиктивного виджета (пустой статический текст) работает хорошо. Вы также можете использовать 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)
что означает добавление растягиваемого размера в Sizer. Итак, можно было бы создать один объект, подобный empty_cell = (0,0)
а затем встать empty_cell
Везде, где в вашем Sizer необходимо пустое пространство (где, например, wx.statictext используется в принятом ответе).