wxpython: центрировать и выравнивать по правому краю два элемента управления по горизонтали одновременно

У меня есть два элемента управления в горизонтальном сайзере. Как я могу заставить один из них быть выровненным влево (или вправо), а другой - по центру?

import wx
from wx.lib.stattext import GenStaticText

class PageNavigator(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.SetBackgroundColour((179, 179, 179))

        self.scrollbar = wx.Slider()
        self.scrollbar.Create(self)

        self.pagenum_txtctrl = GenStaticText(self, label="Page 1")

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.pagenum_txtctrl, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT, 0)
        #sizer.AddStretchSpacer(1)
        sizer.Add(self.scrollbar, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, 0)
        #sizer.AddStretchSpacer(1)
        self.SetSizer(sizer)

Было бы здорово, если бы я мог указать, как установить ширину текстового элемента управления равной нулю. Это может заставить сайзер правильно отцентровать ползунок. Тем не менее, это все еще не элегантный метод.


person user8666391    schedule 03.06.2018    source источник


Ответы (1)


Вы не можете иметь два элемента в простом BoxSizer и каждый элемент выровнен по-разному. Это не поддерживается. Вместо этого я бы просто добавил объект wx.Spacer (или, возможно, пару из них) и заставил бы их расширяться, чтобы помочь вам управлять макетом.

Или вы можете просто использовать GridSizer с тремя столбцами и поместить средний виджет в средний столбец.

person Mike Driscoll    schedule 05.06.2018