Вопрос

Я делаю свой первый набег на программирование графического интерфейса, и я пытаюсь справиться с Wxpython. Я пытаюсь использовать wxglade, но он оказался немного глюми.

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

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

Это макет, на который я ищу (скриншот wxglade):

wxGlade layout screenshot

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

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)

По -видимому, потому, что кнопка «вниз» помещается в 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 используется в принятом ответе).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top