2017-02-17 2 views
0

Я сделал небольшую и простую программу, используя wx.BoxSizer. Вот исходный код:»Как сделать расстояние с wx Python 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 или другим менеджером макетов ... Еще раз спасибо.

+0

Непонятно, что вы просите. Как вы добавляете горизонтальное пространство?Часть с «sunken_border header1 и header2» просто кажется полностью искаженной. –

+0

Попробуйте использовать FlexGridSizer вместо нескольких BoxSizer's – Ripi2

ответ

0

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

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

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

Итак:

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

добавляет 5 pizels ниже заголовка 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()  
+0

Я пробовал ваш код, и он по-прежнему обладает вертикальным пространственным эффектом. Я также попытался с помощью FlexGridSizer и имел ту же проблему ... – Erik343

0

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

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

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

Он работает, яй! Спасибо.

Смежные вопросы