본문 바로가기

wxPython

파이썬 GUI, 박스사이저 추가예제2 wx.BoxSizer

반응형

 

개요 

    박스사이저(wx.BoxSizer) 추가 예제를 다룬다. 박스사이저 Add() 메소드의 속성값인 proportion에 대해 알아보고, flagwx.EXPAND에 대해서도 알아보자. 박스사이저의 기본적인 내용에 대해서는 이전 포스팅(https://hexa-coding.tistory.com/16)을 참조하자. 

 

 

wx.BoxSizer.Add() - proportion 속성 

    박스사이저에 위젯을 할당할 때 proportion 속성값이 있다. 이 값은 박스사이저 내에서 위젯이 차지하는 크기적 비율값을 의미한다. 박스사이저가 수평 박스사이저라면, proportion 값은 x 방향 길이값 비율을 의미하고, 반대로 수직 박스사이저라면 y 방향 길이값을 의미한다. proportion 값은 0, 1, 2, 3, ... 혹은 음수값도 가능하다. 아래 예제 1을 통해 proportion = 0인 경우에 위젯 크기가 어떻게 되는지 살펴보자. 

 

 

예제1 - proportion = 0

proportion 값이 0인 경우, 버튼의 크기는 고정된다. 반면 1 이상인 자연수인 경우, 버튼 크기는 박스사이저 크기에 비례해서 늘어난다.

반응형
import wx

class Example(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'Example Window', size=(400,300))

        panel=wx.Panel(self)

        # 박스사이저
        bsizer = wx.BoxSizer(wx.VERTICAL)

        # 상단 텍스트
        txt = wx.StaticText(panel, -1, "VERTICAL BOXSIZER EXAMPLE1", size=(-1,-1), style=wx.ALIGN_CENTER)
        # 버튼 1,2,3
        btn1 = wx.Button(panel, -1, "[Button1]\nProportion=0")
        btn2 = wx.Button(panel, -1, "[Button2]\nProportion=1")
        btn3 = wx.Button(panel, -1, "[Button3]\nProportion=2")

        # 박스사이저에 버튼의 Proportion을 0,1,2로 각각 다르게 할당
        bsizer.Add(txt, 0)
        bsizer.Add(btn1, 0)
        bsizer.Add(btn2, 1)
        bsizer.Add(btn3, 2)

        # 패널에 박스사이저 할당
        panel.SetSizer(bsizer)


if __name__=="__main__":
    app = wx.App()
    frame=Example(parent=None, id=-1)
    frame.Show()
    frame.Center()
    app.MainLoop()
 

wx.BoxSizer.Add() - flag=wx.EXPAND 속성 

    위의 예제 1과 비교하여 flag 속성에 wx.EXPAND가 적용된 경우 위젯 사이즈가 어떻게 변하는지 살펴보자. 우선 박스사이저는 wx.VERTICAL을 적용하여 수직배치를 하였다. 여기에 flag=wx.EXPAND 속성이 적용되면 수평방향으로 위젯이 확장된다. 창 크기를 수평방향으로 늘리면 위젯도 덩달아 늘어난다. proportion의 경우 예제2가 수직 박스사이저이므로 수직방향 길이에만 영향을 준다

 

 

예제2

    박스사이저의 크기가 증가할 때 wx.EXPAND의 영향에 대해 알아보자. 박스사이저는 수직 박스사이저이다. 

수직박스사이저에서 wx.EXPAND의 효과. 창크기가 늘어나면 위젯도 덩달아 늘어난다.

import wx

class Example(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'Example Window', size=(400,300))

        panel=wx.Panel(self)

        # 박스사이저
        bsizer = wx.BoxSizer(wx.VERTICAL)

        # 상단 텍스트
        txt = wx.StaticText(panel, -1, "VERTICAL BOXSIZER EXAMPLE2", size=(-1,-1), style=wx.ALIGN_CENTER)
        # 버튼 1,2,3
        btn1 = wx.Button(panel, -1, "[Button1]\nProportion=1\nwx.EXPAND")
        btn2 = wx.Button(panel, -1, "[Button2]\nProportion=2\nwx.EXPAND")
        btn3 = wx.Button(panel, -1, "[Button3]\nProportion=1\nwx.EXPAND")

        # 박스사이저에 버튼의 Proportion을 1,2,1로 각각 다르게 할당
        bsizer.Add(txt, proportion=0, flag=wx.EXPAND)
        bsizer.Add(btn1, proportion=1, flag=wx.EXPAND)
        bsizer.Add(btn2, proportion=2, flag=wx.EXPAND)
        bsizer.Add(btn3, proportion=1, flag=wx.EXPAND)

        # 패널에 박스사이저 할당
        panel.SetSizer(bsizer)


if __name__=="__main__":
    app = wx.App()
    frame=Example(parent=None, id=-1)
    frame.Show()
    frame.Center()
    app.MainLoop()

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형