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

목차

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

  - 일반적인 GUI 질문

  - What GUI toolkits exist for Python?

  - Tkinter 질문

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

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

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

## 일반적인 GUI 질문

## What GUI toolkits exist for Python?

Standard builds of Python include an object-oriented interface to the Tcl/Tk widget set, called tkinter. This is probably the easiest to install (since it comes included with most binary distributions of Python) and use. For more info about Tk, including pointers to the source, see the Tcl/Tk home page. Tcl/Tk is fully portable to the macOS, Windows, and Unix platforms.

Depending on what platform(s) you are aiming at, there are also several alternatives. A list of cross-platform and platform-specific GUI frameworks can be found on the python wiki.

## Tkinter 질문

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

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

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

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/).

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 옵션을 보십시오).