【问题标题】:wxPython - Can't make wx.StaticText align inside a wx.StaticBoxSizerwxPython - 无法使 wx.StaticText 在 wx.StaticBoxSizer 内对齐
【发布时间】:2021-06-16 14:59:59
【问题描述】:

进展如何?

我正在尝试将两个 wx.StaticText 对齐在一个水平框内,该框位于一个垂直 wx.StaticBoxSizer 内。你自己看。我猜代码说明了我想要做什么。

谢谢!

import wx

class Frame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        sizer = wx.StaticBoxSizer(wx.VERTICAL, self)
        left = wx.StaticText(self, -1, 'left', style=wx.ALIGN_LEFT)
        right = wx.StaticText(self, -1, 'right', style=wx.ALIGN_RIGHT)

        hBox = wx.BoxSizer(wx.HORIZONTAL)
        hBox.Add(left)
        hBox.Add(right)

        sizer.Add(hBox)
        self.SetSizerAndFit(sizer)

app = wx.App()
frame = Frame(None).Show()
app.MainLoop()

【问题讨论】:

    标签: alignment wxpython


    【解决方案1】:

    自从在水平 boxsizers 中删除 wx.ALIGN_LEFTwx.ALIGN_RIGHT 并引入:
    wx._core.wxAssertionError: C++ assertion "!(flags & wxALIGN_RIGHT)" failed at /tmp/pip-install-8ko13ycp/wxpython/ext/wxWidgets/src/common/sizer.cpp(2168) in DoInsert(): Horizontal alignment flags are ignored in horizontal sizers

    这是个问题。

    另一种选择是在左侧和/或右侧的 sizer 指令中使用spacing。例如

    import wx
    
    class Frame(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent)
    
            sizer = wx.StaticBoxSizer(wx.VERTICAL, self, "Test")
            left = wx.StaticText(self, -1, 'left')
            right = wx.StaticText(self, -1, 'right')
    
            hBox = wx.BoxSizer(wx.HORIZONTAL)
            hBox.Add(left, 0, wx.RIGHT, 100)
            hBox.Add(right, 0, wx.LEFT, 100)
    
            sizer.Add(hBox)
            self.SetSizerAndFit(sizer)
    
    app = wx.App()
    frame = Frame(None).Show()
    app.MainLoop()
    

    【讨论】:

    • 谢谢!我很乐意根据我的解决方案调整您的代码。 :D
    【解决方案2】:

    看来我必须指定 size 才能使对齐工作!

    import wx
    
    class Frame(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent)
    
            sizer = wx.StaticBoxSizer(wx.VERTICAL, self)
            left = wx.StaticText(self, -1, 'left', size=(175, 15), style=wx.ALIGN_LEFT)
            right = wx.StaticText(self, -1, 'right', size=(25, 15))
    
            hBox = wx.BoxSizer(wx.HORIZONTAL)
            hBox.Add(left)
            hBox.Add(right)
    
            sizer.Add(hBox)
            self.SetSizerAndFit(sizer)
    
    app = wx.App()
    frame = Frame(None).Show()
    app.MainLoop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-03
      • 2012-08-15
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      相关资源
      最近更新 更多