Выравнивание объектов по низу в wxPython
Некоторое время я пытался добавить кнопку в нижнюю часть сортировщика и, похоже, не могу заставить ее работать правильно. Я предоставил код из моего дизайна вместе с плохо спроектированным макетом ascii. Я хочу, чтобы кнопка "Назад" была в левом нижнем углу моего кадра.
---------------------------------
| TITLE |
| |
| |
| |
| BUTTON1 BUTTON2 |
| |
| |
| |
| |
| |
| |
| BACK BUTTON |
---------------------------------
КОД:
Title = wx.StaticText(self, wx.ID_ANY, "Title", style=wx.ALIGN_CENTER)
Title.SetMinSize((100, 100))
Title.SetFont(wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))
self.Button1 = wx.Button(self, wx.ID_ANY, "Button 1")
self.Button2 = wx.Button(self, wx.ID_ANY, "Button 2")
self.BackButton = wx.Button(self, wx.ID_ANY, "Back")
SplitSizer = wx.BoxSizer(wx.VERTICAL)
ButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
SplitSizer.Add(Title, 0, wx.ALIGN_CENTER, 0)
ButtonSizer.Add(self.Button1, 0, 0, 0)
ButtonSizer.Add(self.Button2, 0, 0, 0)
SplitSizer.Add(ButtonSizer, 0, wx.EXPAND, 0)
SplitSizer.Add(self.BackButton, 0, wx.ALIGN_BOTTOM | wx.ALIGN_LEFT | wx.ALL, 0)
self.SetSizer(SplitSizer)
Редактировать: я установил кадр так, чтобы окно не могло быть изменено. Скриншот вывода выглядит следующим образом.
1 ответ
Выравнивание элементов в сортировщиках коробок работает только в направлении, поперечном первичному направлению сортировщика. Итак, используя ALIGN_BOTTOM
в VERTICAL
классификатор SplitSizer
не имеет смысла (и в wxWidgets 3.1+ вы получите ошибку подтверждения, объясняющую это вам).
Вместо этого вам нужно нажать кнопку внизу, добавив растягиваемый элемент, то есть элемент с ненулевой пропорцией (обычно только 1), перед ним. Самый простой способ сделать это - добавить растяжимую проставку, т.е. добавить SplitSizer.AddStretchSpacer()
перед добавлением кнопки "назад" в классификатор.
Обратите внимание, что при этом кнопка "назад" переместится вниз, а две другие кнопки - вверх. Если вы хотите избежать этого, например, центрируя другие кнопки, вы знаете, что делать: просто добавьте еще одну растяжку перед ними.