2014-05-17 52 views
-1

我是zetcode.com wxPython的学习者。但该网站获得的代码比解释更多。所以我想知道什么时候使用HORIZONTAL以及何时使用VERTICAL BoxSizers。我问这个,因为我想象下面的代码不采取行动:使用水平和垂直boxsizers

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

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

回答

1

何时使用水平和垂直BoxSizer?

当你想要你的元素垂直放置在彼此那么你使用垂直boxsizer。

当你想要你的元素水平放置到彼此那么你使用水平boxsizer。

见下面这张图片,这是很容易理解:

sizers demo

示例代码:

我创建垂直boxsizer在myPanelAmyPanelB水平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看看会发生什么?

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

+0

感谢您的简单解释。但你仍然没有回答关于我发布的代码。看看代码,这是我的问题的细节。 –

0

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

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