전체 글 27

ezWxPython : 백그라운드 작업 I (Idle Handler, Timeout Handler)

백그라운드 작업하기 I (Idle, Timeout) 경우에 따라 GUI 컨트롤의 값을 프로그램에서 변경해야 하는 경우가 있는데, 일반적으로 GUI 컨트롤 값은 Main 쓰레드에서만 변경이 가능하다. 불가피하게 사용자가 생성한 백그라운드 쓰레드에서 GUI 컨트롤의 값을 직접 변경해야 하는 경우, Crash가 발생할 수 있는데, 이를 방지하기 위해서는 CallAfter() 와 같은 함수를 이용하여 Main 쓰레드에서 해당 작업을 수행되도록 해야 한다. 이 경우, 사용자가 Action 함수를 미리 만들어서 등록하거나 클로저를 생성해서 등록해야 하는 번거로움이 있으므로, GUI의 변경을 수반하는 간단한 작업의 경우, 별도의 쓰레드를 생성하지 않고 Idle 핸드러나 타임아웃 핸들러에서 여러번에 나누어 수행하는 것..

카테고리 없음 2019.04.10

ezWxPython : 레이아웃 I - 사용자 영역 만들기

레이아웃 I : 사용자 영역 만들기 기본 레이아웃 사용자 영역은 어플리케이션이 동작하기 위한 각종 컨드롤들이 배치되는 공간이며, 파이썬의 list 를 이용하여 구성하는데, 하나의 세로 Layout과 여기에 포함된 여러 개의 가로 Layout으로 구성된다. body_def = [ [ ew.Button("Clear", handler=onClear), ew.Button("Copy", handler=onCopy), ew.Button("Paste", handler=onPaste), ], [ ew.Text("Multiline\nText\nEditor", handler=onText,multiline=True,expand=True,proportion=1,key='text'), { 'expand' : True, 'pro..

카테고리 없음 2019.04.10

ezWxPython : 상태바 만들기

스테이터스바 만들기 스테이터스바는 파이썬의 list 구조를 이용해서 만드는 데, 하나의 스테이터스바 아이템에 대해서 ["텍스트", 너비]와 같은 형태로 구성하고, 여러개의 아이템들을 리스트로 구성함으로써 스테이터스바를 만들 수 있다. 여기에서 너비의 값이 양수인 경우에는 픽셀 단위의 절대값을 그 크기로 하며 지정할 수 있으며, 음수인 경우에는 레이아웃의 proportion 동일한 원리로 동작하여, 다른 스테이터스 항목과의 상대적인 크기를 갖도록 윈도우 창의 크기에 따라 자동으로 조정된다. 아래의 예에서는 3번째와 4번째 항목은 각각 픽셀로 64, 32 크기의 너비를 가지며, 첫번째와 두번째 항목은 나머지 공간을 2 대 1로 나누어 할당된다. status_def = [ ["Ready", -2], ["Nor..

카테고리 없음 2019.04.10

ezWxPython : 툴바 만들기

툴바 만들기 툴바는 파이썬의 list 구조를 이용해서 만드는 데, 하나의 툴바 아이템에 대해서 ["아이콘", "핸들러", "텍스트", "툴팁"]과 같은 형태로 구성하고, 여러개의 아이템들을 리스트로 구성함으로써 툴바를 만들 수 있다. 여기에서 "텍스트" 와 "툴팁"은 필요한 경우에만 정의해서 사용할 수 있으며, 핸들러를 None으로 정의하여 해당 툴 버튼을 Disable 상태로 만들 수 있다. tool_def = [ [exit_png, onExit, "Exit", "Close Application" ], [None], [new_png, onNone, "New", ], [save_png, None, "Save", ], [copy_png, onNone, "Copy", ], [paste_png, onNone,..

카테고리 없음 2019.04.09

ezWxPython : 메뉴 만들기

매뉴 만들기 메뉴는 다음과 같이 파이썬의 dict 구조를 이용해서 구성 한다. menu_def = { "File" : { "Options" : { "Option1" : [ onOption1, option_png ], "Option2" : { "Option2-1" : onOntion21, "Option2-2" : onOption22, } }, "Settings" : None, "-" : None, "Exit" : [ onExit, wx.ART_QUIT ], }, "Help" : { "About" : onAbout }, } 메뉴 항목은 "메뉴이름" : Handler 와 같은 형식으로 추가한다. 이 때, 메뉴에 아이콘을 추가하고자 하는 경우에는 Handler 위치에 리스트를 이용하여 [ Handler, Ico..

카테고리 없음 2019.04.09

ezWxPython : 윈도우 만들기

다음 예제와 같이 WxApp 를 이용하여 응용프로그램을 생성한다. 이 때, 화면 구성은 미리 정의된 layout 객체를 이용한다. ​ import ezWxPython as ew ​ appWin = ew.WxApp(u"Frame Demo", 320, 240) appWin.makeLayout(layout) appWin.run() ​ WxApp는 윈도우 타이틀, 가로 크기, 세로 크기의 세 개 파라미터를 입력으로 받는다. 여기에서 사용자의 입력에 대해서는 이벤트 Driven 방식으로 처리하므로, 다음에 설명할 레이아웃(layout) 구성 시에 이벤트 핸들러를 등록함으로써. GUI 이벤트를 받아서 처리할 수 있다. ​ 또한, 사용자의 입력과 무관하게 주기적으로 처리해야하는 작업에 대해서는, Idle 이벤트 핸들..

카테고리 없음 2019.04.09

ezWxPython : 소개

ezWxPython으로 GUI 프로그램 만들기 ezWxPython은 wxPython을 쉽게 사용할 수 있도록 만든 Wrapper 프로젝트 이며, pySimpleGUI나 pyForms와 유사한 방식으로 화면을 구성하게 함으로써, 응용프로그램의 레이아웃을 직관적으로 빠르고 쉽게 만들 수 있도록 해주는 라이브러리이다. 따라서, ezWxPython을 사용하면 wxFormBuilder와 같은 별도의 GUI 디자이너 없이도, 빠르고 간단하게 GUI 프로그램을 만들 수 있다는 장점이 있다. GUI 디자이너를 사용하여 응용프로그램을 개발하는 경우에는 WISWYG 방식으로 화면을 구성할 수 있다는 장점이 있으나, 기능을 개선하거나 화면의 배치를 바꾸는 경우에, 매번 GUI 디자이너에서 작업해서 다시 소스에 반영해야 하는..

카테고리 없음 2019.04.09