카테고리 없음

ezWxPython : 컨테이너 - 심플북

zdiv 2019. 4. 10. 00:20

심플북

심플북노트북과 동일하게 하나의 화면에 여러개의 레이아웃을 지정하여, 현재 선택된 화면만을 보여주는 기능을 제공한다. 노트북과 다른 점이 있다면 현재 화면을 사용자가 선택하는 것이 아니고, 프로그램에 의해서 선택한다는 것이다. 따라서 심플븍에는 사용자가 선택할 수 있는 탭이 존재하지 않는다. 또한, 심플북은 다음과 같은 화면 전환 효과도 제공한다.

{
    'roll_to_left'    : wx.SHOW_EFFECT_ROLL_TO_LEFT,
    'roll_to_right'   : wx.SHOW_EFFECT_ROLL_TO_RIGHT,
    'roll_to_top'     : wx.SHOW_EFFECT_ROLL_TO_TOP,
    'roll_to_bottom'  : wx.SHOW_EFFECT_ROLL_TO_BOTTOM,
    'slide_to_left'   : wx.SHOW_EFFECT_SLIDE_TO_LEFT,
    'slide_to_right'  : wx.SHOW_EFFECT_SLIDE_TO_RIGHT,
    'slide_to_top'    : wx.SHOW_EFFECT_SLIDE_TO_TOP,
    'slide_to_bottom' : wx.SHOW_EFFECT_SLIDE_TO_BOTTOM,
    'blend'           : wx.SHOW_EFFECT_BLEND,
    'expand'          : wx.SHOW_EFFECT_EXPAND,
    None              : wx.SHOW_EFFECT_NONE,
}

심플북의 화면 구성은 노트북과 동일하나, 사용자가 선택할 수 있는 탭이 없으므로, 노트북의 레이아웃에서 레이블을 제외한 다음과 같은 구조를 갖는다.

[ '레이아웃1', '레이아웃2', ... ]

body_def = [
    [ ew.Simplebook( 
         [ editor_layout, browser_layout,],
         expand=True, proportion=1
      ),
      { 'expand' : True, 'proportion' : 1 }
    ],
]

레이아웃 구조는 다음과 같이 노트북의 경우와 동일하게 구성한다.

editor_layout = [
    [ ew.Button('Clear'), ew.Button('Copy'), ew.Button('Paste'),],
    [ ew.Text('Multiline\nText\nExample',multiline=True,expand=True,proportion=1),
      { 'expand' : True, 'proportion' : 1 }
    ],
]

심플북 예제

심플북 화면

 

심플북 소스

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")

def onTab1(event):
    appWin.setBookEffect('book','expand')
    appWin.setBookPage('book',0)

def onTab2(event):
    appWin.setBookEffect('book','slide_to_left')
    appWin.setBookPage('book',1)

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

editor_layout = [ 
    [ ew.Button('Clear'), ew.Button('Copy'), ew.Button('Paste'),],
    [ ew.Text('Multiline\nText\nExample',multiline=True,expand=True,proportion=1),
      { 'expand' : True, 'proportion' : 1 }
    ],
]

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

body_def = [
    [ ew.Simplebook( 
         [ editor_layout, browser_layout,],
         expand=True, proportion=1, key='book'
      ),
      { 'expand' : True, 'proportion' : 1 }
    ],
    [
      None,
      ew.Button('Tab1', handler=onTab1),
      ew.Button('Tab2', handler=onTab2),
    ]
]

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

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

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