wxPython:在两个BoxSizer内对齐元素

wxPython:在两个BoxSizer内对齐元素,wxpython,wxwidgets,Wxpython,Wxwidgets,我想对齐Boxsizer的两个元素,即:“BIG BIG Strinnnnnggggg”和“Measurement”,以便它们位于同一列下,如下所示: hello world Measurement oh no worldBIG BIG STRINNNNNNGGGGGGGGGGGGGGGGGGGGGGGGG 如何使用下面的代码来实现这一点 阅读wxPython文档时,它会说: ALIGN*标志允许您指定项目在中的对齐方式 施胶器分配

我想对齐Boxsizer的两个元素,即:“BIG BIG Strinnnnnggggg”和“Measurement”,以便它们位于同一列下,如下所示:

hello world                                Measurement
oh no worldBIG BIG STRINNNNNNGGGGGGGGGGGGGGGGGGGGGGGGG
如何使用下面的代码来实现这一点

阅读wxPython文档时,它会说:

ALIGN*标志允许您指定项目在中的对齐方式 施胶器分配给它的空间,根据边界进行调整(如有)

然而,这种情况并非如此

import wx
from imgtec import codescape
import wx.lib.inspection

class MyRegion(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="My Region")
        b1=wx.BoxSizer(orient=wx.HORIZONTAL)
        b2=wx.BoxSizer(orient=wx.HORIZONTAL)

        d1 = wx.StaticText(self, label="hello world")
        b1.Add(d1)
        d2 = wx.StaticText(self, label="Measurement", style=wx.ALIGN_RIGHT)
        b1.Add(d2,
               flag=wx.ALIGN_RIGHT | wx.EXPAND)

        c1 = wx.StaticText(self, label="oh no world")
        b2.Add(c1)
        c2 = wx.StaticText(self, label="BIG BIG STRINNNNNNGGGGGGGGGGGGGGGGGGGGGGGGG",style=wx.ALIGN_RIGHT)
        b2.Add(c2,
           flag=wx.ALIGN_RIGHT| wx.EXPAND )

        sizer = wx.GridBagSizer()
        sizer.Add(item=b2, pos=(0,0), flag=wx.EXPAND)
        sizer.Add(item=b1, pos=(1,0), flag=wx.EXPAND)
        self.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.App()
    frame = MyRegion(None)
    frame.Show()
    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

您只需要在
d1
d2
之间添加一个间隔符:

import wx
import wx.lib.inspection

class MyRegion(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="My Region")
        b1=wx.BoxSizer(orient=wx.HORIZONTAL)
        b2=wx.BoxSizer(orient=wx.HORIZONTAL)

        d1 = wx.StaticText(self, label="hello world")
        b1.Add(d1)

        b1.AddStretchSpacer()  # <-- ADD THE SPACER HERE

        d2 = wx.StaticText(self, label="Measurement", style=wx.ALIGN_RIGHT)
        b1.Add(d2,
               flag=wx.ALIGN_RIGHT | wx.EXPAND)

        c1 = wx.StaticText(self, label="oh no world")
        b2.Add(c1)
        c2 = wx.StaticText(self, label="BIG BIG STRINNNNNNGGGGGGGGGGGGGGGGGGGGGGGGG",style=wx.ALIGN_RIGHT)
        b2.Add(c2,
           flag=wx.ALIGN_RIGHT| wx.EXPAND )

        sizer = wx.GridBagSizer()
        sizer.Add(item=b2, pos=(0,0), flag=wx.EXPAND)
        sizer.Add(item=b1, pos=(1,0), flag=wx.EXPAND)
        self.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.App()
    frame = MyRegion(None)
    frame.Show()
    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()
导入wx
导入wx.lib.inspection
类MyRegion(wx.Frame):
定义初始化(自身,父级):
wx.Frame.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuux.Frame.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
b1=wx.BoxSizer(方向=wx.HORIZONTAL)
b2=wx.BoxSizer(方向=wx.HORIZONTAL)
d1=wx.StaticText(self,label=“hello world”)
b1.加入(d1)

b1.AddStretchSpacer()#Mike Driscoll的答案已经说明了正确操作的方法,我只想补充一点,要记住一条简单的规则:对齐标志仅在横向尺寸标注器方向工作,即水平长方体尺寸标注器的垂直方向

未来版本的wxWidgets在水平尺寸测量仪内使用
wxALIGN_RIGHT
时会出现错误(类似地,
wxALIGN_TOP
或垂直尺寸测量仪内的另一个垂直对齐方式),因为这永远不会起作用


您可以在二维尺寸测量仪(如
wx[Flex]GridSizer
)中的两个方向上使用对齐标志。

非常感谢,我想知道为什么wx.ALIGN\u右侧不起作用。这是有道理的:)