wxPython:对齐两个boxsizer中的元素



我想对齐boxsizer的两个元素,即:"BIG BIG STRINNNNNGGGGGGG"one_answers"Measurement",使它们位于同一列下,如下所示:

hello world                                Measurement
oh no worldBIG BIG STRINNNNNNGGGGGGGGGGGGGGGGGGGGGGGGG

我如何使用下面的代码来实现这一点?

阅读wxPython文档,它显示如下:

ALIGN*标志允许您在sizer分配给它的空间,并根据边界进行调整(如果有的话)。

然而,在这种情况下,情况并非如此。

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()

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

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()

Mike Driscoll的回答已经显示了正确操作的方法,我只想补充一点,有一条简单的规则需要记住:对齐标志只能在横向sizer方向上工作,即垂直于水平框式sizer。

wxWidgets的未来版本将在水平sizer中使用wxALIGN_RIGHT(类似地,wxALIGN_TOP或垂直sizer中的另一个垂直对齐)时出现错误,因为这可能永远不会起作用。

但是,在wx[Flex]GridSizer等二维尺寸调整器中,可以在两个方向上使用对齐标志。

最新更新