강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

wxPython을 이용한 간단한 어플리케이션

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

wxPython을 이용한 간단한 어플리케이션

5-01.gif

프로그램명

wxPython

리뷰버전

wxPython 2.6.3.3

운영체제

All

라이센스 GPL
지원언어

Python

홈페이지

http://www.wxpython.org http://wiki.wxpython.org

t제작사

Robin Dunn Software Craftsman

작성자

수퍼유저코리아 서버팀http://www.superuser.co.kr

 
소개와 작동원리 top

wxPython은 구조적이고 배우기 쉬운 Python언어를 이용하여 GUI(Graphical User Interface)를 신속하고 간략히 제작하도록 도와주는 GUI 저작도구(toolkit)이다. wxPython은 크로스 플랫폼 GUI라이브러리인 wxWidgets C++class 를 Python에서 지원가능 하도록 제작한 것이다.

※ Python을 접해보지 않았다면 Python 튜토리얼을 읽어보기 바란다. C와 C++ 혹은 다른 언어에 어느 정도 익숙하다면 2~3일 정도에 Python 코드를 충분히 이해 할 수 있다고 한다.

3_02.gif

Python과 마찬가지로 wxWindows 역시 Open Source 이므로 사용에 아무런 제한이 없다.(wxWindows Source자체를 수정하여 사용하더라도 아무런 문제가 없다)

wxWindows를 기반으로 만들어진 wxPython 역시 Open Source Project로 진행 개발되고 있다.

wxpPython은 요즘의 Linux 배포판에 기본으로 탑재되어 제공되므로 Linux 설치만으로도 사용이 가능하다. 하지만 설치되어 있지 않은 Linux나 Windows 기타 OS에서는 python, wxPython을 설치 하여 주어야한다.(python은 http://www.python.org에서 다운받으면 되고, wxPython은 http://www.wxpython.org에서 다운받으면 된다. wxPython설치만으로 python이 설치되는 경우도 있지만 각각의 패키지를 설치하여 사용하는 것이 사용자 환경에 최적화 할 수 있는 방안이라 생각된다.)


특징 및 역사 top

ㄱ. 배우기 쉽다.

C와 C++ 혹은 다른 언어에 어느 정도 익숙하다면 2~3일 정도에 Python 코드를 충분히 이해 할 수 있다고 한다. 이렇게 쉬운 언어로 작성되어지는 wxPython은 배우기에 매우 편하고 쉽다는 점이 가장 큰 장점이라 하겠다. 또한 Python은 아주 강력한 언어로써의 기능도 가졌기에 wxPython 역시 강력한 능력을 발휘할수 있다는 것이다.

ㄴ. 재미있다.

개발자라면 언어의 선택에 있어 기왕이면 언어를 배우고 사용하기에 편리함고 재미남이 숨겨져 있어야 할 것이다. 구습에 얽매여 있거나 구태의연하다면 언어를 배우고 사용하는 사람의 입장에서는 이보다 피곤한 일은 없을 것이다. 하지만 wxPython은 강력하고 간략함 만큼이나 재미가 숨겨져 있는 GUI 저작도구이다.

ㄷ. 크로스 플랫폼 환경 지향

GUI 화면 개발에서 Windows 환경을 빼놓을 수 없다. 그러면서도 Linux나 다른 여타의 OS의 GUI역시 고려대상이 되어야하는 것이 현실이다. 이렇게 모든 OS 플랫폼에 구속되지 않고 자유로이 구현할 수 있는 크로스 플랫폼도구가 있다면 좋을 것이다. 하지만 아직 그런 완벽한 도구는 존재하지 않다. 그러나 현재까지 나와 있는 GUI toolkit중에 wxPython이 선두그룹에서 달리고 있다. wxPython은 크로스 플랫폼 환경을 지향하고 있다는 말이다.

ㄹ. 기업환경에 적용 가능성

프로그램을 하며 취미로 하는 사람은 아주 드물다. 결국 프로그램은 기업(enterprise)환경에 지배될 수밖에 없다고 필자는 생각한다. 그러기에 개발도구로 사용할 GUI toolkit은 기업환경에 적절히 대응이 되어야 할 것이다. wxPython은 현재 수많은 기업환경에서도 훌륭한 기능을 발휘하고 있다.

ㅁ. 라이센스

사용할 도구가 이왕이면 공개된 도구이면 더욱 편할 것이면 사용자층도 훨씬 넓을 것이라 생각된다. wxPython 역시 Open Source 라이센스 정책을 따르고 있으므로 사용비용의 부담도 줄일 수 있다.

 


사용용도 top

- GUI 프로그래밍의 기본개념 익히기

- 크로스 플랫폼 지원 GUI 프로그래밍

- Graphical user interface를 간단하고, 빠른 시간 내 제작하고자 할 경우

 

간단한 어플리케이션 만들기

 

Source 1) Hello World

#!/usr/bin/python

from wxPython.wx import *

class MyApp(wxApp):

def OnInit(self):

frame = wxFrame(NULL, -1, "Hello from wxPython")

frame.Show(true)

self.SetTopWindow(frame)

return true

app = MyApp(0)

app.MainLoop()

위 소스를 실행하면 아래 그림을 볼 수 있다.

5-03.gif  5-04.gif

Source 1 설명

wxPython 을 import하여 wxPython에서 제공하는 각종 클래스와 함수를 이용가능하게 만든다.

wxPython은 wxApp클래스에서 제공하는 OnInit 메쏘드를 통해서 만들어진다.

OnInit는 Windows를 만들고, 프로그램이 처음에 시작하면서 필요한 각종 초기화 작업을 실행한다.

그리고 wxFrame을 이용하여 window(parent window 혹은 main frame)를 만든다. 처음에 윈도우를 만들때 생성자(constructor)를 이용하여 윈도의 위치와 크리를 지정해주지만, 여기서는 프로그램을 최소한 간소화 시키기 위해서 생략하였기에 기본값으로 만들어지게 된다.

마지막 2개의 라인은 아마도 모든 wxPython프로그램에 공통적으로 포함될 것이다. 이는 우리가 만든 어플리케이션 클래스의 instance를 생성하고 MainLoop()메쏘드를 통해서 만든 클해스를 호출하게 된다. MainLoop는 wxPython어플리케이션의 핵심 요소로 이벤트를 프로세싱하고 어플리케이션에 포함되어 있는 여러 가지 윈도우에 이벤트를 전달하는 등의 일을 수행한다. 다행이도 우리는 이러한 과정이 일어나는 세부적인 내용을 몰라도 된다. wxPython이 알아서 처리해 주기 때문이다.



Source 2) small editor

#!/usr/bin/python

from wxPython.wx import *

class MainWindow(wxFrame):

def __init__(self, parent, id, title):

wxFrame.__init__(self, parent, -4, title, size = (200, 100),

style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)

self.control = wxTextCtrl(self, 1, style=wxTE_MULTILINE)

self.Show(true)

app = wxPySimpleApp()

frame = MainWindow(None, -1, "Hello from wxPython")

frame.Show(1)

app.MainLoop()

Source 2 설명

이 소스는 매우 간단한 에디터 윈도우즈창이다.

wxFrame으로부터 상속 받은 MainWindow라는 클래스를 정의하고 __init__ 메쏘드를 오버로딩 한다. wxTextCtrl이라는 간단한 편집기 함수를 사용하여 문서 편집 text창을 만든다. 소스를 실행하면 단순히 text 입력 및 편집 기능만이 활성화 된다. 파일 저장과 같은 기능을 추가로 넣는 소스를 공부해보면 더 훌륭한 editor가 될 것이다.

5-05.gif



Source 3) small editor + 메뉴와 상태바 지원

#!/usr/bin/python

from wxPython.wx import *

ID_ABOUT = 101

ID_EXIT = 102

class MyFrame(wxFrame):

def __init__(self, parent, ID, title):

wxFrame.__init__(self, parent, ID, title,

wxDefaultPosition, wxSize(200, 150))

self.CreateStatusBar()

self.SetStatusText("This is the statusbar")

menu = wxMenu()

menu.Append(ID_ABOUT, "&About",

"More information about this program")

menu.AppendSeparator()

menu.Append(ID_EXIT, "E&xit", "Terminate the program")

menuBar = wxMenuBar()

menuBar.Append(menu, "&File");

self.SetMenuBar(menuBar)

class MyApp(wxApp):

def OnInit(self):

frame = MyFrame(NULL, -1, "Hello from wxPython")

frame.Show(true)

self.SetTopWindow(frame)

return true

app = MyApp(0)

app.MainLoop()

Source 3 설명

위 Source 2) 소스파일에 아래 두부분을 추가해 넣었다.

추가1)

ID_ABOUT = 101

ID_EXIT = 102

추가2)

menu = wxMenu()

menu.Append(ID_ABOUT, "&About",

"More information about this program")

menu.AppendSeparator()

menu.Append(ID_EXIT, "E&xit", "Terminate the program")

menuBar = wxMenuBar()

menuBar.Append(menu, "&File");

self.SetMenuBar(menuBar)

추가부분에 의해 Source 2에서 단순하고 볼품없던 창에서 메뉴와 상태바 기능이 탑재된 멋진 에디터가 구현되었다.

5-05.gif  5-06.gif

 


간략히 wxPython을 이용하여 프로그램 제작 방법을 알아보았다. 이외 수많은 기능들이 존재하지만 지면관계상 여기서 정리하도록 하겠다.

wxPython의 활용 방안은 무궁무진할 듯합니다. 필자도 더욱 열심히 학습하여 wxPython의 활용방안을 연구하여 다음번에는 wxPython의 활용방안에 대해 문서작업을 해보도록 하겠습니다.

더 필요한 자료는 http://wxpython.org/tutorial.php 참고하시길 바랍니다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  89 명