파이썬 강의/wx

파이썬 GUI(wxPython) 5. Sizer(레이아웃) : BoxSizer, StaticBoxSizer

마리사라 2021. 1. 5. 23:59
반응형

이번 강의는 wxPython에서 레이아웃의 기능인 Sizer, 그중에서 BoxSizer와 StaticBoxSizer에 대해서 알아보겠습니다.

 


1. BoxSizer

BoxSizer는 박스가 차곡차곡 쌓이듯이 네모 박스에 위젯들을 넣어서 정렬한다고 붙여진 이름입니다. 그렇기에 BoxSizer를 이용한 프로그램들은 가지런히 정렬된 모양으로 나타납니다.

 

BoxSizer의 코드는 다음과 같습니다.

sizer = wx.BoxSizer(orient)

orient는 방향이라는 파라미터입니다. 세로로 쌓을지, 가로로 쌓을지를 결정하는 파라미터로 wx.VERTICAL(세로) | wx.HORIZONAL(가로)의 두 가지가 있습니다. 저는 세로인 wx.VERTICAL을 사용하겠습니다.

 

이렇게 Sizer를 만들었으면 위젯을 Sizer에 등록해 주어야 합니다.

sizer.Add(self.button, 0, wx.ALL, 5)

이때 Add에 들어가는 파라미터는 다음과 같습니다

  • window : 사이저에 추가할 대상을 지정합니다.
  • proportion : 내부의 위젯들의 사이즈가 변경되었을 때의 신축성을 나타내는 파라미터입니다. 0이라면 사이즈 변경을 허용하지 않지만, 다른 위젯이 0이 아닐경우 바뀔 수 있습니다.
  • flag : sizer 안에서 위젯이 어떻게 들어갈지를 정해줍니다. flag의 종류는 다양하며, 자세한 내용은 여기에서 볼 수 있습니다
  • border : sizer의 두께를 지정합니다. flag에 따라 두께만큼 위젯이 sizer의 경계선에서 떨어집니다.
  • userData : sizer의 크기 변경이 보다 복잡할 경우, 다른 클래스에 연결할 때 사용합니다. 기본적으로는 사용하지 않는것으로 간주합니다.

마지막으로 sizer를 이 프레임의 sizer로 등록해 주어야 합니다.

self.SetSizer(sizer)

 

이제 결과를 확인하겠습니다.

 

 

Sizer가 적용된 버튼

 

원래 화면에 꽉 차던 버튼에서 매우 작게 변했습니다.

 

아직은 Sizer가 재대로 적용됐는지 확인하기 힘들기 때문에 버튼을 하나 더 만들어 보겠습니다.

self.button2 = wx.Button(self, id=2, label='버튼2')
sizer.Add(self.button2, 0, wx.ALL, 5)

이제 결과를 확인해 보겠습니다.

 

 

세로로 정렬된 버튼과 버튼2

 

버튼과 버튼2가 세로로 정렬된 것을 보실 수 있습니다. 만약 wx.VERTICAL이 아니라 wx.HORIZONAL이 들어갔다면 버튼이 세로로 나란히 생성됩니다.


2. StaticBoxSizer

StaticBoxSizer는 BoxSizer의 앞에 Static이 추가된 만큼, 차이점은 Static의 유무라고 할 수 있습니다.

 

wxPython에서 Static은 대개 고정된 글자를 표현하는 위젯을 의미합니다. 즉 StaticBoxSizer는 BoxSizer에서 글자 위젯이 추가되었다고 유추해 볼 수 있습니다.

 

StaticBoxSizer의 정확한 뜻은 StaticBox + BoxSizer입니다. StaticBox는 위에서 설명한 대로 글자가 포함된 박스 모양 위젯을 의미합니다. 즉 BoxSizer의 태두리에 StaticBox가 둘러져있다고 보시면 됩니다.

 

StaticBoxSizer는 다음과 같은 코드로 사용 가능합니다.

sizer = wx.StaticBoxSizer(orient, window, label)
  • orient : BoxSizer의 orient와 같습니다.
  • window : Sizer가 어느 Window에 포함되는지 설정합니다.
  • label : StaticBox의 글자를 설정합니다.

이제 원래의 BoxSizer를 주석처리하고 위의 코드를 집어넣으면 바로 StaticBoxSizer를 확인하실 수 있습니다. 저는 window는 self(Mainframe), 라벨은 '박스'라고 하겠습니다.

 

 

StaticBoxSizer가 적용된 화면

 

 

왼쪽위에 박스라는 라벨이 추가되었으며, 자세히 보면 테두리에 둘러져있는 선이 보이실 겁니다. 이것이 StaticBox의 특징입니다.


3. 마치며

이번 시간에는 BoxSizer와 StaticBoxSizer를 알아보았습니다. 이다음에는 Sizer에서 GridSizer, FlexGridSizer, GridBagSizer의 3가지에 대해서 알아보겠습니다.

반응형