Как сделать интервалы с помощью wx Python 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. Есть ли способ добавить горизонтальное пространство перед заголовками, не добавляя вертикальное пространство в качестве побочного эффекта? Благодарю.

---РЕДАКТИРОВАТЬ---

Чтобы ответить на ваш комментарий: вот изображение программы: Простая программа BoxSizer...

"Пробел" в зеленом - это искомый пробел, но "пробел" в красном - это ненужный побочный эффект. Я в основном хочу только зеленое пространство, но я не хочу красное пространство, я хочу, чтобы заголовки были вровень с двумя панелями (как прямо прямо сверху...). Прямо сейчас мне нужно сделать абсолютное позиционирование, чтобы заставить его работать, я просто хотел знать, можете ли вы заставить его работать с BoxSizer или каким-либо другим менеджером макета... Еще раз спасибо.

2 ответа

Когда ты пишешь

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

вы добавляете 5 пикселей все вокруг.

Так:

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

добавляет 5 пизелей под заголовком 1

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

добавляет 5 пикселей над панелью 1

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

добавляет 5 пикселей ниже заголовка 1 (содержится в box1)

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

добавляет 5 пикселей над панелью 1 (содержится в рамке 2)

в общей сложности 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()       

Я нашел решение!

вместо этого: box1.AddSpacer(50)

сделать это... box1.AddSpacer((50, 0))

Это работает, ууу! Благодарю.

Другие вопросы по тегам