0

我使用 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 之间添加垂直空间。无论如何只在标题之前添加水平空间而不添加垂直空间作为副作用?谢谢。

- -编辑 - -

回答您的评论:这是程序的图片: 在此处输入图像描述 Simple BoxSizer 程序...

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

4

2 回答 2

1

当你写

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()       
于 2017-02-19T17:13:53.817 回答
0

我找到了解决方案!

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

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

它有效,耶!谢谢。

于 2017-02-23T21:03:05.597 回答