GUI 에 해당하는 글1 개
2005.06.19   wxPython으로 GUI 프로그래밍하기


wxPython으로 GUI 프로그래밍하기
日新又日新 | 2005. 6. 19. 13:46

헤헷, 내가 번역했다구. 지금 프로그래밍 하고 있는게 있는데 막상 내가 보려니까 답답해서, 그래서 번역을 했는데, 이것이 Python 공동체에 기여가 된다면 얼마나 좋을꼬.

C++ Guide for wxPythoneers


1. 서론
wxPython 에 관한 최근의 많은 문서들이 사실 wxWindows문서를 기반으로 한 C++
문서이고, 필요한 곳에는 Python에 특화된 설명이 붙어있다. 이것은 wxPython
사용자가 C++ 의 메소드와 함수 정의를 읽어낼 수 있고 그것을 파이썬의 구문으로
번역할 수 있어야만 한다는 것을 의미한다. C++를 경험해보지 못한 사람들에게,
이것은 아주 기를 꺾어버리는 것이 될 수 있다. 이 안내서의 목적은 그런 작업을
더욱 쉽게 만들어주는 것이다.


2. 문서가 작성되어지게 된 경위
당신에게 유용한 글을 찾을 수 있는 "wxPython Notes"와 "Topic Overview"에 있는
몇개의 문서들은 논외로 하고서, 파이썬 프로그래머에게 있어 가장 중요한
wxPython문서들은 다음과 같다.
 - The Alphabetical Class Reference
 - The list of Functions
주>해당 문서들은 wxPython 2.6 버전의 Demo 중, wxWidgets Reference 안에 있다.

이것은 당신이 wxPython 애플리케이션을 개발할때 몇번이고 다시 참조하게 될
정보들이다. 그러나 불행하게도, 이 레퍼런스들은 C++ 프로그래머를 위해서 씌여졌고
따라서 거의 모든 메소드와 함수 정의들이 파이썬 프로그래머가 감을 잡기 힘들게
C++ 언어로 씌여져 있다.


3. C++에서 번역하기
한번 Alphabetical class Reference의 전형적인 항목을 살펴보자. 예를 들어 만일
당신이 wxWindos의 항목으로 이동했다면 다음과 같은 구성을 볼 것이다.
 - A general description of the class
     클래스에 대한 전반적인 설명
 - Derived from
     이것은 현재 보고있는 클래스가 상속받은 클래스의 리스트이다.

 - Include files
     이것은 파이썬 프로그래머랑은 관련이 없다.
 - Window styles
    이것들은 현재의 클래스가 서로 다른 방식으로 동작한다라든지 어떻게
    보여지는가라든지에 대한 "style" 코드들이다.
 - See also
     스스로 설명(?)

 - Members
    C++ 에서, "memver function"이란 용어는 클래스의 메소드에 대한 참조로 쓰인다.
    따라서, 클래스의 여러가지 메소드들은 이 부분에 나열이 되어있고, 표준 C++
    로 기술이 되어있다.
      <>::<>
    기본적으로, 이것은 단지 클래스의 서로다른 메소드들에 대해 빠르게 접근할 수
    있는 목록이다. 메소드 명칭을 클릭하면 당신은 그 메소드의 정의로 안내될 것이다.

이것은 모든 서로다른 "member function"(메소드) 정의에 해당한다.

3.1. 생성자와 소멸자
이 두개의 특별한 메소드들은 각각의 클래스에 대해서 정의되어있다. 그리고 이것들은
언제나 리스트의 맨 위에 위치한다. 먼저, "constructor"(생성자) 메소드가 있는데,
파이썬의 __init__() 메소드에 해당한다. --이것은 클래스의 새로운 오브젝트가
생성될때 항상 호출되는 메소드이다. C++에서, 생성자는 언제나 클래스 자신과 같은
이름을 가진다. 따라서 예를들면 wxWindow 클래스의 생성자는 다음과 같이 호출된다.
      wxWindow::wxWindow
소멸자 메소드는 당신이 생각하듯이 클래스의 오브젝트가 더이상 사용되지 않고
소멸되어야 할때 호출된다. 파이썬은 __del__()이라는 동등한 메소드를 가지고 있다.
C++과는 다르지만 이것은 상당히 많은 파이썬 사용자들에게는 소멸을 알아차리지
못할 것이기 때문에 드물게 사용되는 것이다.(?) C++에서, 소멸자는 언제나 클래스의
이름에 틸드기호("~")를 앞에 붙여서 이름지어진다. 따라서 wxWindows 클래스의
소멸자는 다음과 같이 호출된다.
      wxWindow::~wxWindow

보통 wxPython 프로그램은 소멸자 메소드에 대해서 사용할 일이 없거나 신경쓸 필요가
없으므로, 그것을 무시해도 상관없다.


4. 메소드 정의
메소드 정의는 wxWindows 문서의 가장 유용한 부분이면서 불행히도 만일 당신이 C++에
익숙하지 못하다면 가장 이해하기 어려운 부분이다. 예를 들어 다음은 wxWindow 클래스에
대한 생성자(__init__() 메소드)이다.
 wxWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxPanelNameStr)
이것은 끔찍하게 보일 것이다. 그러나 만일 당신이 다음 내용을 기억한다면 해석하는
것이 절대 어려운 일이 아니다.
 1. 파이썬에서처럼, 모든 파라미터들은 왼쪽에서 오른쪽으로 각각을 콤마로
 구분하면서 나열된다. 따라서 예를 들면 새로운 wxWindow를 생성하려면
 당신은 아마도 다음과 같은 호출을 사용할 것이다.
  myWindow = wxWindow(parent, id, pos, size, style, name)
 파이썬에서 메소드를 정의할 때, 당신은 단지 각각의 파라미터들의 이름을
 나열하고 가능한 기본값을 주면 된다. 왜냐하면 C++는 훨씬 더 복잡한
 언어이기 때문에 매우 많은 정보들이 각각의 파라미터들에게 주어져야 하기
 때문이다. --그러나 파라미터들을 나열할때 다른것 앞에 있어야 하는 기본적인
 원칙은 여전히 적용된다.
 주> 인수들의 순서를 말하는 듯 싶군요.
 
 당연한 것이지만, 파라미터들이 메소드 정의안에 있어야 하는 것과 마찬가지로
 파라미터들은 "Parameters" 구역안에 구분되어져서 나열이 되어야 한다.
 자주 있는 경우로 만일 당신이 복잡한 세부내용을 읽지도 않는다면, 파라미터들의
 목록은 아마도 당신에게 당신이 필요로 하는 모든것을 말해줄 것이다.
 확실히 시작하는 사람에게 있어서 너무 좋다!

 2. C++가 "strongly typed" 언어이기 때문에, 각각의 파라미터들은 그것에
 관련한 "type"을 가져아 한다. 예를 들어, wxWindow 생성자에서, "pos"
 파라미터는 wxPoint(wxPoint 객체)라는 형식을 가진다. 이런 형식 값은
 메소드를 이해하기 위한 형식 정보를 판단하는 실마리로 유용하다.
 게다가 wxWindows 자신에 의해서 정의된 객체들의 서로 다른 형식들이 있다.
 여기 당신이 만나게 될 공통된 C++ 내장 형식들이 있다.
  int : A integer number
  long : A long integer number
  float : A floating-point number
  bool : A TRUE-or-FALSE value
  wxString : A wxWindows-specific string(text) value

 3. 파이썬에서처럼, 많은 파라미터들이 기본값을 부여받는다. 당신은 모든
 파라미터들을 기본값과 함께 나열할 필요가 없고, 만일 당신이 그렇게 한다면
 키워드들을 당신이 입력한 각각의 파라미터들을 구분하는데 사용할 수 있다.
 예를 들어, 당신은 새로운 wxWindow객체를 다음의 구문을 이용하여 생성할 수
 있다.
  myWindow = wxWindow(parent, id, style = wxSIMPLE_BORDER)
 기본값은 이미 남겨진 파라미터들에게 제공이 되어있기 때문에, 당신은
 사용하길 원한다 해도 나열할 필요가 없다.

 4. 메소드 정의에 있어서 나열된 파이썬과는 상관없는 특별한 문자와
 코드들에 대한 모음이다.
  - 파라미터 형식 뒤의 * 문자
  - 형식 앞의 const 라는 단어
  - 형식 뒤의 & 문자
 좋은 소식은 파이썬 프로그래머인 당신은 이 모든 딱딱한 표현들을 간단히
 무시해도 된다는 것이다!

 5. wxWindows에서 정의된 많은 메소드들이 호출자에게 값을 리턴하기 때문에
 C++는 당신이 각각의 파라미터들에 대한 형식처럼 메소드의 형식을 정의할
 것을 요구한다. 파라미터들과 마찬가지로, 메소드에 의해 리턴된 값의 형식은
 메소드 명칭 앞에 나열된다. 예를 들어, wxWindows.getFont() 메소드는
 다음과 같은 정의를 가진다.
  wxFont& GetFont() const
 여기서 GetFonst() 메소드는 wxFont 객체를 리턴받게 설정되었다. 파라미터와
 마찬가지로, 메소드의 반환형식에 대한 나열은 메소드가 리턴할 정보에 대한
 유용한 실마리가 될 수 있다.
 파라미터와 같이, 당신은 단지 C++하고만 연관된 난해한 코드들을 맞닥뜨리게
 될 것이다. 예를 들어,
  - 메소드 명칭 이전의 static 라는 단어
  - 메소드 정의 마지막의 const 라는 단어
  - 메소드 정의 전의 void 라는 단어
  - 메소드 정의 전의 virtual 라는 단어
 void 코드는 특별한 언급을 할 만하다. 만일 메소드가 void 형식을 리턴하도록
 되어있다면, 그것은 그 메소드가 어떤 값도 반환하지 않는다는 것을 의미한다.
 예를 들어 이것은 파이썬에서 다음 메소드는 값을 반환하지만,
  def spam(self, x):
   return x * 21.7
 다음 메소드는 그렇지 않다.
  def eggs(self, x):
   self.variable = x
 C++에서, spam() 메소드는 float 형식을 반환할 것이지만, eggs() 메소드는
 아무런 값을 반환하지 않기 때문에 void 형식을 반환한다.
 
 6. 파이썬에서처럼, C++ 객체는 모든 메소드 정의에서 그들 부모 클래스로부터
 "inherit"(상속)을 받는다. 따라서 예를 들자면 wxFrame 클래스는 wxWindow
 클래스, wxEvtHandler 클래스, wxObject 클래스에서 상속을 받는다.
 이것은 wxWindow, wxEvtHandler, wxObject 의 메소드들은 wxFrame 객체가
 이런 모든 상속받은 메소드들을 호출할 수 있어도 wxFrame 문서에서는
 나열되지 않는다는 것을 의미한다. 이것은 항상 염두에 두고 있어야 유용하다.
 왜냐하면 당신은 때때로 당신이 원하는 부모 클래스에는 있지만 클래스 그
 자체에는 정의되어있지 않은 메소드를 찾을 수 있기 때문이다.

 7. 당신이 반드시 알아야 하는 또 다른 복잡한 것이 있다. C++ 는
 "method overloading"이라고 불리는 기능을 가지고 있다. 이것은 C++프로그래머를
 다른 파라미터의 집합으로 알려진 다른 버전의 같은 메소드를 한가지 이상의
 버전에 대해 정의하도록 이끈다. 예를 들어, wxWindow.ConvertPixelsToDialog()
 메소드는 두 가지 정의를 가진다.
  wxPointConvertPixelsToDialg(const wxPoint& pt)
  wxSizeConvertPixelsToDialog(const wxSize& sz)
 같은 메소드 이름이지만, 다른 파라미터를 가진다. 파이썬은 메소드 오버러딩을
 필요로 하지 않거나 사용할 일이 없다. 따라서 wxPython에 있어 당신은 언제나
 메소드 정의에서 각각의 다른 버전에 대해 파이썬 이름으로 주어진 노트를
 찾아야 한다. 따라서 예를 들면, wxWindow.ConverPixelsToDialg() 메소드의
 목록은 다음 노트를 포함한다.
  wxPython note : In place of a single overloaded method name,
   wxPython Implements the following methods:
   ConverDialogPointToPixcels(point) : Accepts and returns a wxPoint
   ConverDialogSizeToPixels(size) : Accepts and returns a wxSize

 8. 마지막으로, 당신이 메소드 정의를 읽는 와중에 항상 wxPython 노트를
 주시하기 바란다. wxPython노트에 들어있는 정보는 언제나 그 어떤 wxWindows
 문서가 알려주는 모든 내용보다 우선되는 내용을 가지고 있다.


5. 요약
당신이 이 지침들을 기억하고 있는 한, C++로 씌여진 wxWindows문서를 해석하는 것이
이제는 어렵지 않을 것이다. 그것은 단지 그것이 C++에 특화된 복잡함 때문에 실제로
그런것 보다 아주 많이 복잡하게 보이는 것 뿐이다. 그렇지만 당신의 머리가 C++의
딱딱한 말투를 자동으로 걸러서 이해하는 데에는 많은 시간이 필요치 않을 것이다.
그리고 당신은 wxWindows 레퍼런스들을 C++이 아니라 파이썬으로 기술되어있는 것처럼
빠르게 사용할 수 있을 것이다.

행복한 파이썬 사용이 되기를, 그리고 당신의 모든 GUI들을 빠르게 사용하고
친근해지기를.

 
 
 
트랙백 | 댓글



위치로그 : 태그 : 방명록 : 관리자
이우성's Blog is powered by Daum / Designed by SSen
관리자  |  글쓰기
BLOG main image
전, 이우성입니다. ( I am Woosung, Lee. ) ""
 Category
 Media
 TAGS
 Recent Entries
 Recent Comments
 Calendar
 Archive
 Link Site
 Visitor Statistics
+ Total :
+ Today :
+ Yesterday :
카피
rss