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

일반적인 GUI 질문

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

여러분이 목표로 하는 플랫폼에 따라, 몇 가지가 있습니다. 그들 중 일부는 아직 파이썬 3에 이식되지 않았습니다. 적어도 TkinterQt는 파이썬 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 툴킷(PyQtPySide를 사용하는)이나 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_LIBRARYTK_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 옵션을 보십시오).