2017-02-17 5 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...' 

문제는 I 각 헤더의 왼쪽 가로 공간을 추가하면, 또한 헤더와 sunken_border HEADER1 및 HEADER2 상하 공간을 추가한다는 것이다. 여하튼 수직 공간을 부작용으로 추가하지 않고 헤더 앞에 수평 공간을 추가 할 수 있습니까? 감사합니다. .

귀하의 코멘트에 대답하기 위해

--- 편집 --- : 녹색

'공간'수배 ... enter image description here 간단한 팔렛에서 BoxSizer 프로그램 : 여기 프로그램의 사진입니다 공간이 있지만 '공간'은 빨간색으로 불필요한 부작용입니다. 나는 기본적으로 녹색 공간 만 원한다. 그러나 나는 붉은 공간을 원하지 않는다. 헤더가 두 개의 패널 (같은 바로 위에있는 것처럼 ...)과 같아야한다. 지금 당장은 절대 위치 지정을해야 작동 할 수 있습니다. BoxSizer 또는 다른 레이아웃 관리자로 작업하게 만들 수 있는지 알고 싶습니다. 다시 한 번 감사드립니다.

+0

당신이 무엇을 요구하고 있는지 분명하지 않습니다. "가로 공간을 어떻게 추가합니까"?"sunken_border header1 및 header2"가있는 부분은 완전히 엉망이 된 것처럼 보입니다. –

+0

여러 BoxSizer의 – Ripi2

답변

0

당신이 ALL AROUND 5 개 픽셀을 추가

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

을 쓸 때.

그래서 :

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

1

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

1

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

헤더 1 5 이하의 화소를 추가 패널 위의 5 개 픽셀을 추가 헤더 아래 5 pizels 추가 (BOX1 포함)

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

은 panel1 (상자 2에 포함) 위에 5 픽셀을 추가합니다.

총 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를 사용해보십시오. 코드를 사용해 보았지만 여전히 수직 공간 부작용이 있습니다. FlexGridSizer를 대신 사용해 보았는데 같은 문제가 있습니다 ... – Erik343

0

같은! 대신이의

: box1.AddSpacer (50)

이 ... box1.AddSpacer 할 ((50, 0))

그것은 작동 야호! 감사합니다. .