我是来自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让我感到困惑。
答案 0 :(得分:1)
何时使用水平和垂直BoxSizer?
当您希望元素彼此垂直放置时,请使用Vertical boxsizer。
当您希望元素彼此水平放置时,请使用Horizontal boxsizer。
见下图,很容易理解:
示例代码:
我在myPanelA
中创建了Vertical boxsizer,在myPanelB
中创建了一个Horizontal 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
看看会发生什么?
我希望很清楚。我建议你玩这个代码片段。
答案 1 :(得分:0)
这基本上是wxPython: Items in BoxSizer don't expand horizontally, only vertically
的欺骗无论出于何种原因,wxWidgets背后的人决定让BoxSizers以与他们所述相反的方向扩展。换句话说,方向为wx.HORIZONTAL的BoxSizer将垂直展开,设置为wx.VERTICAL的BoxSizer将水平扩展。如果您希望它在两个方向上展开,请使用设置为1或更大的比例+ wx.EXPAND标志。