그래픽 사용자 인터페이스 FAQ
****************************


일반적인 GUI 질문
=================


파이썬에 어떤 플랫폼 독립적인 GUI 툴킷이 있습니까?
==================================================

여러분이 목표로 하는 플랫폼에 따라, 몇 가지가 있습니다. 그들 중 일부는
아직 파이썬 3에 이식되지 않았습니다. 적어도 Tkinter와 Qt는 파이썬 3과
호환되는 것으로 알려져 있습니다.


Tkinter
-------

파이썬의 표준 빌드에는 Tcl/Tk 위젯 집합에 대한 객체 지향 인터페이스가
포함되는데, tkinter라고 불립니다. 이것이 아마도 가장 (파이썬의 대부분
바이너리 배포에 포함되어 있으므로) 설치하고 사용하기 쉽습니다. 소스에
대한 안내를 포함하는 Tk에 대한 자세한 내용은 Tcl/Tk 홈페이지를 참조하
십시오. Tcl/Tk는 맥 OS X, 윈도우 및 유닉스 플랫폼에 완벽하게 호환됩니
다.


wxWidgets
---------

wxWidgets(https://www.wxwidgets.org)는 C++로 작성된 무료이고 이식성 있
는 GUI 클래스 라이브러리인데, 많은 플랫폼에서 네이티브 룩앤필을 제공합
니다. 윈도우, 맥 OS X, GTK, X11 가 모두 현재 안정 타깃에 포함됩니다.
파이썬, 펄, 루비등 다양한 언어에서 언어 바인딩을 사용할 수 있습니다.

wxPython은 wxwidgets의 파이썬 바인딩입니다. 공식 wxWidgets 배포보다 약
간 뒤떨어 지지기는 하지만, 순수 파이썬 확장을 통해 다른 언어 바인딩에
서는 사용할 수 없는 많은 기능을 제공하기도 합니다. 활발한 wxPython 사
용자와 개발자 커뮤니티가 있습니다.

wxWidgets와 wxPython은 모두 프리웨어나 셰어웨어뿐만 아니라 상업용 제품
에서의 사용을 허락하는 관대한 라이센스가 있는 무료 공개 소스 소프트웨
어입니다.


Qt
--

Qt 툴킷(PyQt나 PySide를 사용하는)이나 KDE(PyKDE4)를 위한 바인딩을 사용
할 수 있습니다. PyQt는 현재 PySide보다 더 성숙하지만, 독점 응용 프로그
램을 작성하려면 Riverbank Computing에서 PyQt 라이센스를 사야 합니다.
PySide는 모든 응용 프로그램에서 무료입니다.

Qt 4.5 이상은 LGPL 라이센스에 따라 라이센스가 부여됩니다; 또한, 상용
라이센스는 The Qt Company에서 제공됩니다.


Gtk+
----

파이썬용 GObject 인트로스펙션 바인딩를 사용하면 GTK+ 3 응용 프로그램을
작성할 수 있습니다. 파이썬 GTK+ 3 자습서도 있습니다.

Gtk+ 2 툴킷을 위한 이전 PyGtk 바인딩은 James Henstridge가 구현했습니다
; <http://www.pygtk.org>를 보세요.


Kivy
----

Kivy는 데스크톱 운영 체제(윈도우, macOS, 리눅스)와 모바일 장치(안드로
이드, iOS)를 모두 지원하는 교차 플랫폼 GUI 라이브러리입니다. 이것은 파
이썬과 Cython으로 작성되었으며 다양한 범위의 윈도우 백 엔드를 사용할
수 있습니다.

Kivy는 MIT 라이선스에 따라 배포되는 무료 공개 소스 소프트웨어입니다.


FLTK
----

간단하면서도 강력하고 성숙한 교차 플랫폼 윈도우 시스템인 FLTK 툴킷용
파이썬 바인딩이 PyFLTK 프로젝트에서 제공됩니다.


OpenGL
------

OpenGL 바인딩은 PyOpenGL을 참조하십시오.


파이썬에 어떤 플랫폼 특정 GUI 툴킷이 있습니까?
==============================================

PyObjc Objective-C 브리지를 설치함으로써, 파이썬 프로그램은 맥 OS X의
Cocoa 라이브러리를 사용할 수 있습니다.

Mark Hammond의 Pythonwin에는 Microsoft Foundation Classes에 대한 인터
페이스와 주로 파이썬으로 MFC 클래스를 사용하여 작성된 파이썬 프로그래
밍 환경이 포함되어 있습니다.


Tkinter 질문
============


Tkinter 응용 프로그램을 어떻게 고정(freeze)합니까?
--------------------------------------------------

Freeze는 독립 실행형 응용 프로그램을 만드는 도구입니다. Tkinter 응용
프로그램을 고정할 때, 응용 프로그램은 여전히 Tcl과 Tk 라이브러리가 필
요하므로 진정한 독립 실행형이 아닙니다.

한 가지 해결책은 응용 프로그램을 Tcl과 Tk 라이브러리와 함께 제공하고,
그것들을 실행 시간에 "TCL_LIBRARY"와 "TK_LIBRARY" 환경 변수를 사용하여
가리키는 것입니다.

진정한 독립 실행형 응용 프로그램을 얻으려면, 라이브러리를 구성하는 Tcl
스크립트도 응용 프로그램에 통합해야 합니다. 이를 지원하는 한 가지 도구
는 Tix 배포판 (http://tix.sourceforge.net/)의 일부인 SAM(독립 실행형
모듈)입니다.

SAM이 활성화된 Tix를 빌드하고, 파이썬의 "Modules/tkappinit.c" 내부에서
"Tclsam_init()" 등을 적절하게 호출하고, libtclsam과 libtksam과 링크합
니다 (Tix 라이브러리도 포함할 수 있습니다).


I/O를 기다리는 동안 Tk 이벤트를 처리하도록 할 수 있습니까?
----------------------------------------------------------

윈도우 이외의 다른 플랫폼에서라면, 그렇습니다, 그리고 스레드가 필요하
지도 않습니다! 그러나 I/O 코드를 약간 재구성해야 합니다. Tk는 Xt의
"XtAddInput()" 호출과 동등한 것을 갖고 있는데, 파일 기술자에서 I/O가
가능할 때 Tk 메인 루프에서 호출할 콜백 함수를 등록할 수 있도록 합니다.
파일 처리기를 참조하십시오.


Tkinter에서 키 바인딩이 동작하지 않습니다: 이유가 무엇입니까?
-------------------------------------------------------------

자주 들리는 불만은 적절한 키를 눌러도 "bind()" 메서드로 이벤트에 연결
된 이벤트 처리기가 처리되지 않는다는 것입니다.

가장 흔한 원인은 바인딩이 적용되는 위젯에 "키보드 포커스"가 없는 것입
니다. focus 명령에 대한 Tk 설명서를 확인하십시오. 보통 위젯은 그것을
클릭할 때 키보드 포커스를 받습니다 (레이블은 그렇지 않습니다;
takefocus 옵션을 보십시오).
