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

목차

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

  - 일반적인 GUI 질문

  - 파이썬에 어떤 GUI 툴킷이 있습니까?

  - Tkinter 질문

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

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

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

## 일반적인 GUI 질문

## 파이썬에 어떤 GUI 툴킷이 있습니까?

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

여러분이 목표로 하는 플랫폼에 따라, 몇 가지 대안이 있습니다. 크로스 플랫폼 및 플랫폼 특정 GUI 프레임워크의 목록을 파이썬 위키에서 확인할 수 있습니다.

## Tkinter 질문

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

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

One solution is to ship the application with the Tcl and Tk libraries, and point to them at run-time using the `TCL_LIBRARY` and `TK_LIBRARY` environment variables.

To get truly stand-alone applications, the Tcl scripts that form the library have to be integrated into the application as well. One tool supporting that is SAM (stand-alone modules), which is part of the Tix distribution (https://tix.sourceforge.net/).

Build Tix with SAM enabled, perform the appropriate call to `Tclsam_init()`, etc. inside Python’s `Modules/tkappinit.c`, and link with libtclsam and libtksam (you might include the Tix libraries as well).

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

On platforms other than Windows, yes, and you don’t even need threads! But you’ll have to restructure your I/O code a bit. Tk has the equivalent of Xt’s `XtAddInput()` call, which allows you to register a callback function which will be called from the Tk mainloop when I/O is possible on a file descriptor. See 파일 처리기.

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

An often-heard complaint is that event handlers bound to events with the `bind()` method don’t get handled even when the appropriate key is pressed.

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