Как сделать интервалы с помощью 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))
Это работает, ууу! Благодарю.