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

목차

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

  - 일반적인 GUI 질문

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

    - Tkinter

    - wxWidgets

    - Qt

    - Gtk+

    - Kivy

    - FLTK

    - OpenGL

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

  - Tkinter 질문

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

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

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

## 일반적인 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 옵션을 보십시오).