Выравнивание объектов по низу в wxPython - PullRequest
0 голосов
/ 05 сентября 2018

Я уже некоторое время пытаюсь добавить кнопку в нижнюю часть сортировщика и, похоже, не могу заставить ее работать правильно. Я предоставил код из моего дизайна вместе с плохо спроектированным макетом 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)

Edit: Я установил рамку так, чтобы окно не могло быть изменено. Скриншот вывода выглядит следующим образом.

https://imgur.com/gallery/JFZRVly

1 Ответ

0 голосов
/ 06 сентября 2018

Выравнивание элементов в сортировщиках коробок работает только в направлении, поперечном первичному направлению сортировщика. Поэтому использование ALIGN_BOTTOM в VERTICAL sizer SplitSizer не имеет смысла (а в wxWidgets 3.1+ вы получите ошибку подтверждения, объясняющую это вам).

Вместо этого вам нужно нажать кнопку внизу, добавив растягиваемый элемент, то есть элемент с ненулевой пропорцией (обычно только 1), перед ним. Простейший способ сделать это - добавить растяжимую проставку, то есть добавить SplitSizer.AddStretchSpacer() перед добавлением кнопки "назад" в классификатор.

Обратите внимание, что при этом одновременно будет нажата кнопка «назад» вниз, а две другие - сверху. Если вы хотите избежать этого, например, центрируя другие кнопки, вы знаете, что делать: просто добавьте еще одну растяжку перед ними.

...