【问题标题】:Use of Horizontal and Vertical boxsizers [duplicate]使用水平和垂直 boxsizers [重复]
【发布时间】:2014-07-06 01:42:44
【问题描述】:

我是 zetcode.com 的 wxPython 学习者。但是该网站的代码多于解释。所以我想知道何时使用HORIZONTAL 以及何时使用VERTICAL BoxSizers。我问这个是因为以下代码没有按我的预期运行:

vbox.Add(sbs, flag=wx.EXPAND | wx.ALL, border=5) # vbox/sbs is a vertical boxsizer/staticboxsizer

我认为它不会扩展,因为我没有给出任何proportion。但实际上它水平扩展但不是垂直扩展。当我添加proportion=1 命令时,它开始垂直扩展。它是一个垂直的 boxsizer,但是为什么在没有给定 proportion 的情况下它会水平扩展呢? Sizer 让我很困惑。

【问题讨论】:

    标签: python user-interface wxpython


    【解决方案1】:

    何时使用水平和垂直 BoxSizer?

    如果您希望元素彼此垂直放置,则使用 Vertical boxsizer。

    如果您希望元素彼此水平放置,则使用 Horizo​​ntal boxsizer。

    看下面这张图,很容易理解:

    示例代码:

    我在 myPanelA 中创建了 Vertical boxsizer,在 myPanelB 中创建了 Horizo​​ntal boxsizer。您可以在上图中看到元素如何相互对齐的不同之处?

    import wx
    
    class test(wx.Frame):
    
        def __init__(self, parent, id, title):
    
            wx.Frame.__init__(self,None, id, title, style=wx.DEFAULT_FRAME_STYLE)
            self.myPanelA = wx.Panel(self, -1, size=(200,200), pos=(0,0))
            self.myPanelB = wx.Panel(self, -1, size=(200,200), pos=(0,205))
            self.mytextA = wx.StaticText(self.myPanelA, -1, 'My-PanelA', size=(80,20))
            self.myPanelA.SetBackgroundColour('#F57373')
            self.mytextB = wx.StaticText(self.myPanelB, -1, 'My-PanelB', size=(80,20))
            self.myPanelB.SetBackgroundColour('#73F573')
            self.mySizerA = wx.BoxSizer(wx.VERTICAL)
            self.mySizerB = wx.BoxSizer(wx.HORIZONTAL)
            self.button1 = wx.Button(self.myPanelA, -1, size=(18,18))
            self.button2 = wx.Button(self.myPanelA, -1, size=(18,18))
            self.button3 = wx.Button(self.myPanelA, -1, size=(18,18))
            self.button4 = wx.Button(self.myPanelB, -1, size=(18,18))
            self.button5 = wx.Button(self.myPanelB, -1, size=(18,18))
            self.button6 = wx.Button(self.myPanelB, -1, size=(18,18))
            self.mySizerA.Add(self.mytextA, 0, wx.ALL, 5)
            self.mySizerA.Add(self.button1, 0, wx.ALL, 5)
            self.mySizerA.Add(self.button2, 0, wx.ALL, 5)
            self.mySizerA.Add(self.button3, 0, wx.ALL, 5)
            self.myPanelA.SetSizer(self.mySizerA)
            self.myPanelA.Layout()
            self.mySizerB.Add(self.mytextB, 0, wx.ALL, 5)
            self.mySizerB.Add(self.button4, 0, wx.ALL, 5)
            self.mySizerB.Add(self.button5, 0, wx.ALL, 5)
            self.mySizerB.Add(self.button6, 0, wx.ALL, 5)
            self.myPanelB.SetSizer(self.mySizerB)
            self.myPanelB.Layout()
    
    if __name__ == "__main__":
        app = wx.App()
        frame = test(parent=None, id=-1, title="Sizer demo")
        frame.Show()
        app.MainLoop()
    

    如果你把这行self.mySizerA.Add(self.button1, 0, wx.ALL, 5)改成

    self.mySizerA.Add(self.button1, 1, wx.ALL, 5) 您会注意到button1 比其他按钮大,如下图所示。 所以,这就是比例。

    此代码行中的5 表示您希望所有组件之间有5 点的空间/距离。试着让它10 看看会发生什么?

    我希望它很清楚。我会建议你玩弄这段代码 sn-p。

    【讨论】:

    • 感谢您的简单解释。但是您仍然没有回答我发布的代码。查看代码和我的问题中的详细信息。
    【解决方案2】:

    这基本上是wxPython: Items in BoxSizer don't expand horizontally, only vertically的骗子

    无论出于何种原因,wxWidgets 背后的人决定让 BoxSizer 向与它们声明的相反方向扩展。换句话说,方向为 wx.HORIZONTAL 的 BoxSizer 将垂直扩展,设置为 wx.VERTICAL 的 BoxSizer 将水平扩展。如果您希望它在两个方向上扩展,则使用设置为 1 或更大的比例 + wx.EXPAND 标志。

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2020-10-21
      • 2012-12-16
      • 2013-10-14
      • 2020-04-02
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多