使用水平和垂直盒式传感器

时间:2014-05-17 18:57:59

标签: python user-interface wxpython

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

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

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

2 个答案:

答案 0 :(得分:1)

  

何时使用水平和垂直BoxSizer?

当您希望元素彼此垂直放置时,请使用Vertical boxsizer。

当您希望元素彼此水平放置时,请使用Horizo​​ntal boxsizer。

见下图,很容易理解:

sizers demo

示例代码:

我在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比其他按钮大,如下图所示。 sizer2 所以,这是比例。

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

我希望很清楚。我建议你玩这个代码片段。

答案 1 :(得分:0)

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

的欺骗

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