如何与wx Python BoxSizer进行间距

时间:2017-02-17 18:13:20

标签: python wxwidgets boxsizer

我使用wx.BoxSizer创建了一个简单的小程序。 这是源代码:'

import wx

# MAIN PROGRAM...
class MyFrame(wx.Frame):

     def __init__(self):

     wx.Frame.__init__(self, None, -1, "My Frame", size = (600, 600))

     mainPanel = wx.Panel(self)
     mainBox = wx.BoxSizer(wx.VERTICAL)

     header1 = wx.StaticText(mainPanel, label = 'Header1:')
     header2 = wx.StaticText(mainPanel, label = 'Header2:')

     panel1 = wx.Panel(mainPanel, size = (200, 200), style = wx.SUNKEN_BORDER)
     panel2 = wx.Panel(mainPanel, size = (200, 200), style = wx.SUNKEN_BORDER)

     box1 = wx.BoxSizer(wx.HORIZONTAL)
     box1.AddSpacer(50)
     box1.Add(header1, 0, wx.ALL, 5)
     box1.AddSpacer(50)
     box1.Add(header2, 0, wx.ALL, 5)

     box2 = wx.BoxSizer(wx.HORIZONTAL)
     box2.Add(panel1, 0, wx.ALL, 5)
     box2.Add(panel2, 0, wx.ALL, 5)

     mainBox.Add(box1, 0, wx.ALL, 5)
     mainBox.Add(box2, 0, wx.ALL, 5)

     mainPanel.SetSizer(mainBox)
     #self.Center()           


if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()

    print 'Exiting...'

问题在于,当我在每个标题的左侧添加水平空格时,它还会在标题和sunken_border header1和header2之间添加垂直空格。无论如何只是在标题之前添加水平空格而不添加垂直空间作为副作用? 感谢。

--- --- EDIT

回答你的评论: 这是该计划的图片: enter image description here   简单的BoxSizer程序......

绿色的“空间”是想要的空间,但红色的“空间”是不必要的副作用。我基本上只想要绿色空间,但我不想要红色空间,我希望标题与两个面板齐平(就像直接在顶部......)。 现在,我必须做绝对定位才能让它工作,我只是想知道你是否可以使用BoxSizer或其他布局管理器... 再次感谢。

2 个答案:

答案 0 :(得分:0)

写作时

Add( ..., 0, wx.ALL, 5)

你正在增加5个像素。

所以:

box1.Add(header1, 0, wx.ALL, 5)

在标题1下方添加5个pizel

box2.Add(panel1, 0, wx.ALL, 5)

在面板1上方添加5个像素

mainBox.Add(box1, 0, wx.ALL, 5)

在标题1下方添加5个像素(包含在box1中)

 mainBox.Add(box2, 0, wx.ALL, 5)

在panel1上方添加5个像素(包含在box2中)

总计20个额外像素。

如果您不想在垂直方向上留出空白,请不要写

Add( ..., 0, wx.ALL, 5)

相反,像这样

 mainPanel = wx.Panel(self)
 mainBox = wx.BoxSizer(wx.VERTICAL)

 header1 = wx.StaticText(mainPanel, label = 'Header1:')
 header2 = wx.StaticText(mainPanel, label = 'Header2:')

 panel1 = wx.Panel(mainPanel, size = (200, 200), style = wx.SUNKEN_BORDER)
 panel2 = wx.Panel(mainPanel, size = (200, 200), style = wx.SUNKEN_BORDER)

 box1 = wx.BoxSizer(wx.HORIZONTAL)
 box1.AddSpacer(50)
 box1.Add(header1)
 box1.AddSpacer(50)
 box1.Add(header2)

 box2 = wx.BoxSizer(wx.HORIZONTAL)
 box2.AddSpacer(5)
 box2.Add(panel1)
 box2.AddSpacer(10)
 box2.Add(panel2)

 mainBox.AddSpacer(5)
 mainBox.Add(box1)
 mainBox.Add(box2)

 mainPanel.SetSizer(mainBox)
 #self.Center()       

答案 1 :(得分:0)

我找到了解决方案!

而不是这个:     box1.AddSpacer(50)

这样做......     box1.AddSpacer((50,0))

它有效,耶! 感谢。