패널 레이아웃
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()
``