카테고리 없음

ezWxPython : 레이아웃 II - 패널 레이아웃

zdiv 2019. 4. 10. 00:14

패널 레이아웃

ezWxPython에서는 직관적이고 간결한 레이아웃을 만들기 위해서 기본적으로 최상위에 하나의 세로 레이아웃만 제공하며, 여기에 포함된 다수의 가로 레이아웃으로 화면을 구성하도록 되어 있다. 웬만한 프로그램의 경우 이러한 구성만으로도 대부분의 기능을 구현 할 수 있으나, 프로그램에 따라서는 이보다 복잡한 화면 구성을 필요로하는 경우가 있다.
이러한 경우에는 패널 레이아웃을 사용하여 화면을 다양하게 확장할 수 있다. 패널은 하나의 세로 레이아웃 내에 다수의 가로 레이아웃을 가지는 독립적인 레이아웃이며, 일반 컨트롤 처럼 상위 레이아웃 내에 포함 시킬 수 있다. 실제로 WxApp 에서 제공하는 기본 레이아웃도 패널로 구성되어 있으므로, 패널 레이아웃의 작성 방법은 기본 레이아웃과 동일하게 작성하면 된다.

패널 레이아웃에는 style 파라미터의 값에 따라 세가지 종류의 기능을 제공하는데, style 이 지정되지 않은 경우에는 기본적인 레이아웃을 제공하며, style이 scroll로 지정된 경우에는 내부적으로 ScrolledWindow 가 생성되어 공간이 부족한 경우에 스크롤 바가 나타나 전체 화면을 표시할 수 있도록 해준다. style이 collapsible 로 지정된 경우에는 타이틀을 클릭하여 접었다 폈다 할 수 있는 레이어웃을 제공하는데, 이는 JavaFx에서의 TitledPane과 유사한 레이아웃이라고 볼 수 있다.

패널 레이아웃 예제

패널 레이아웃 화면

 

 

패널 레이아웃 소스

import os
import sys
import time
import wx
import ezWxPython as ew

def onExit(event):
    appWin.close()

def onAbout(event):
    appWin.messageBox("About", "Panel Demo\nzdiv")

menu_def = { 
    "File" : { 
        "Exit" : [ onExit, wx.ART_QUIT ],
    }, 
    "Help" : { 
        "About" : onAbout 
    },
}

panel_1_1 = [ 
    [ew.Button('Copy'), ew.Button('Paste') ],
    [ew.Text('',multiline=True,expand=True,proportion=1),
     { 'expand' : True, 'proportion' : 1 }
    ],
]

panel_1_2 = [ 
    [ew.Button('Clear'),ew.Button('Paste') ],
    [ew.Text('',multiline=True,expand=True,proportion=1),
     { 'expand' : True, 'proportion' : 1 }
    ],
]

panel_2 = [ 
    [ew.Button('Home'), ew.Button('Back'), ew.Button('Forward') ],
    [ew.Web('http://www.google.com',expand=True,proportion=1),
     { 'expand' : True, 'proportion' : 1 }
    ],
]

body_def = [
    [ ew.Panel(panel_1_1,expand=True,proportion=1), 
      ew.Panel(panel_1_2,expand=True,proportion=2),
      { 'expand' : True, 'proportion' : 1 }
    ],
    [ ew.Panel(panel_2,expand=True,proportion=1), 
      { 'expand' : True, 'proportion' : 2 }
    ]
]

status_def = [
    ["Ready", -1],
]

layout = {
    "menu"   : menu_def,
    "body"   : body_def, 
    "status"   : status_def, 
}

if __name__ == "__main__":
    appWin = ew.WxApp(u"Panel Demo", 640, 480)
    appWin.makeLayout(layout)
    appWin.run()

스크롤 패널 레이아웃 예제

스크롤 패널 레이아웃화면

스크롤 패널 레이아웃소스

import os
import sys
import time
import wx
import ezWxPython as ew

def onExit(event):
    appWin.close()

def onAbout(event):
    appWin.messageBox("About", "Panel Demo\nzdiv")

menu_def = { 
    "File" : { 
        "Exit" : [ onExit, wx.ART_QUIT ],
    }, 
    "Help" : { 
        "About" : onAbout 
    },
}

panel = [ 
    [ ew.Button('Button1') ],
    [ ew.Button('Button2') ],
    [ ew.Button('Button3') ],
    [ ew.Button('Button4') ],
    [ ew.Button('Button5') ],
    [ ew.Button('Button6') ],
    [ ew.Button('Button7') ],
    [ ew.Button('Button8') ],
    [ ew.Button('Button9') ],
]

body_def = [
    [ ew.Panel(panel,expand=True,proportion=1,style='scroll'), 
      { 'expand' : True, 'proportion' : 1 }
    ],
]

status_def = [
    ["Ready", -1],
]

layout = {
    "menu"   : menu_def,
    "body"   : body_def, 
    "status"   : status_def, 
}

if __name__ == "__main__":
    appWin = ew.WxApp(u"Panel Demo", 160, 240)
    appWin.makeLayout(layout)
    appWin.run()

``