tkinter — Tcl/Tk에 대한 Python 인터페이스

tkinter — Tcl/Tk에 대한 Python 인터페이스

tkinter 패키지("Tk 인터페이스")는 Tcl/Tk GUI 도구 키트에 대한 표준 Python 인터페이스예요. Tk와 tkinter는 macOS를 포함한 대부분의 Unix 플랫폼과 Windows 시스템에서 사용할 수 있어요.

명령줄에서 python -m tkinter를 실행하면 간단한 Tk 인터페이스를 보여주는 창이 열려 tkinter가 시스템에 제대로 설치되었는지 확인하고, 설치된 Tcl/Tk 버전도 보여줘요.

출처: Python documentation

본문

Tkinter는 다양한 Tcl/Tk 버전을 지원하며, 스레드 지원 유무에 관계없이 빌드될 수 있어요. Tcl/Tk 8.5.12가 최소 지원 버전이고, 공식 Python 바이너리 릴리스는 Tcl/Tk 8.6을 번들로 제공해요.

Tkinter는 얇은 래퍼가 아니라, 경험을 더 파이썬답게 만들기 위해 상당한 자체 로직을 추가해요. 이 문서는 이러한 추가 사항과 변경 사항에 집중하고, 변하지 않은 세부 사항은 공식 Tcl/Tk 문서를 참조해요.

참고: Tcl/Tk 8.5(2007)는 현대적인 테마 사용자 인터페이스 구성 요소 세트와 이를 사용하는 새 API(tkinter.ttk 참고)를 도입했어요. 이전과 새 API 모두 여전히 사용할 수 있어요. 온라인에서 찾는 대부분의 문서는 여전히 이전 API를 사용하며 개탄스러울 정도로 오래되었을 수 있어요.

보조 자료 (See also)

  • TkDocs — Tkinter로 사용자 인터페이스를 만드는 광범위한 튜토리얼. 핵심 개념을 설명하고 현대 API를 사용하는 권장 방식을 보여줘요.
  • Tkinter 8.5 reference: a GUI for Python — 사용 가능한 클래스, 메서드, 옵션을 자세히 설명하는 Tkinter 8.5 참조 문서.
  • Tcl/Tk Resources: Tk commands — Tkinter가 사용하는 각 Tcl/Tk 명령에 대한 종합 참조. Tcl/Tk Home Page — 추가 문서와 Tcl/Tk 코어 개발 링크.

소개

tkinter 패키지("Tk interface")는 Tcl/Tk GUI 도구 키트에 대한 표준 Python 인터페이스예요. Tk와 tkinter는 macOS를 포함한 대부분의 Unix 플랫폼과 Windows 시스템에서 사용할 수 있어요.

python -m tkinter를 실행하면 간단한 Tk 인터페이스를 보여주는 창이 열리고, tkinter가 올바르게 설치되었는지 확인하며 설치된 Tcl/Tk 버전도 표시해요.

아키텍처 (Architecture)

Tkinter는 Tcl/Tk의 위에 있는 얇은 객체 지향 계층이에요. tkinter를 사용하기 위해 Tcl 코드를 작성할 필요는 없지만, Tk 문서와 가끔은 Tcl 문서를 참고해야 해요. tkinter는 Tk 위젯을 Python 클래스로 구현하는 래퍼들의 집합이에요.

Tcl/Tk는 오랫동안 Python의 핵심적인 일부였어요. 견고하고 플랫폼 독립적인 윈도우 도구 키트를 제공하며, Python 프로그래머는 tkinter 패키지와 그 확장인 tkinter.ttk 모듈을 통해 사용할 수 있어요.

Tkinter 모듈 (Tkinter modules)

Tkinter는 여러 모듈로 구성돼요. 주요 항목:

  • Main Tkinter module — 위젯과 기본 클래스
  • tkinter.colorchooser — 색상 선택 대화상자
  • tkinter.font — Tkinter 폰트 래퍼
  • tkinter.simpledialog — 표준 Tkinter 입력 대화상자
  • tkinter.filedialog — 파일 선택 대화상자, 기본 로드/저장 대화상자
  • tkinter.messagebox — Tkinter 메시지 프롬프트
  • tkinter.scrolledtext — 스크롤 텍스트 위젯
  • tkinter.dnd — 드래그 앤 드롭 지원
  • tkinter.ttk — Tk 테마 위젯

Tk 개념 (Important Tk concepts)

  • 설정 옵션 — 위젯 매개변수는 Dictionary, list, keyword argument의 세 가지 방법으로 지정할 수 있어요.
  • 지오메트리 관리(Geometry management) — 팩(pack), 그리드(grid), 플레이스(place)의 세 가지 지오메트리 관리자가 있어요.
  • 폰트, 색상, 기타 — Tk는 특별한 값을 요구하는 여러 옵션 데이터 타입을 가져요.
  • 바인딩과 이벤트(Bindings and events)bind() 메서드로 이벤트를 위젯에 바인딩할 수 있어요.
  • 위젯 변수 결합 — StringVar, IntVar, DoubleVar, BooleanVar를 StringVar()와 함께 사용해 위젯 변수를 결합할 수 있어요.
  • 윈도우 매니저 — 타이틀, 크기 조절, 위치 등을 제어해요.

참조 (Reference)

주요 클래스:

  • Base and mixin classesBaseWidget, Misc, Pack, Grid, Place
  • Toplevel widgetsTk, TopLevel
  • Widget classesButton, Canvas, Checkbutton, Entry, Frame, Label, LabelFrame, Listbox, Menu, Menubutton, Message, OptionMenu, PanedWindow, Radiobutton, Scale, Scrollbar, Spinbox, Text
  • Variable classesStringVar, IntVar, DoubleVar, BooleanVar
  • Image classesBitmapImage, PhotoImage

스레딩 모델 (Threading model)

Python과 Tcl/Tk에는 서로 다른 스레딩 모델이 있어요. Tcl/Tk 위젯은 스레드 안전하지 않지만, Tcl/Tk 그 자체는 스레드 안전한 것으로 설계됐어요. 이 두 가지를 함께 사용할 때 주의해야 해요. 일반적으로 Tk와 tkinter는 다른 스레드에서 실행되는 애플리케이션과 상호작용할 수 있지만, 이때 queue 모듈을 사용해 큐를 통해 통신하는 것이 좋아요.

더 알아보기 (Learn more)