본문 바로가기
Python

[PYTHON] tkinter로 만드는 파이썬 GUI : 윈도우부터 이벤트까지

by Dev. Orion 2025. 7. 25.
반응형

tkinter로 만드는 파이썬 GUI : 윈도우부터 이벤트까지
[PYTHON] tkinter로 만드는 파이썬 GUI

 

Python에 내장된 표준 GUI 도구인 Tkinter는 설치 없이 바로 사용 가능하며, 버튼, 레이블, 입력창, 캔버스 등 다양한 위젯(widget)을 제공한다.

1. Tkinter의 특징과 강점

  • Python 기본 포함 – 추가 설치 없이 사용 가능.
  • 크로스플랫폼 지원 – Windows, macOS, Linux에서 동일하게 실행 가능.
  • ttk 모듈로 제공되는 테마 위젯 통해 모던한 UI 구성 가능.
  • 학습 곡선이 낮아 초보자에게 적합.

2. 기본 윈도우 생성하기

import tkinter as tk

root = tk.Tk()
root.title("예제 GUI")
root.geometry("300x200")

root.mainloop()

이 코드는 제목과 사이즈가 지정된 창을 띄우며, 이벤트 루프(mainloop())를 통해 인터랙션을 처리한다.

3. 주요 위젯 소개

  • Label: 글자나 이미지 표시
  • Button: 클릭 가능한 버튼
  • Entry: 한 줄 입력창
  • Text: 여러 줄 입력창
  • Canvas: 도형, 이미지 드로잉 영역
  • ttk.Combobox, Progressbar, Treeview 등 고급 위젯.

4. 이벤트 처리와 바인딩

import tkinter as tk

def on_click():
    label.config(text="버튼이 눌렸어요!")

root = tk.Tk()
label = tk.Label(root, text="안녕하세요")
button = tk.Button(root, text="클릭!", command=on_click)
label.pack()
button.pack()
root.mainloop()

버튼 클릭 시 command 콜백이 실행되고, 더 복잡한 이벤트는 widget.bind()를 사용해 키보드나 마우스 이벤트를 처리할 수 있다.

5. 레이아웃 관리: pack, grid, place

  • pack(): 수직·수평으로 위젯 정렬
  • grid(): 행과 열 기반 배치
  • place(): 정확한 좌표 지정 레이아웃

적합한 레이아웃 매니저 선택은 유지보수성과 UI 일관성을 결정한다.

6. ttk를 활용한 테마 UI

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
btn = ttk.Button(root, text="ttk 버튼")
btn.pack(padx=10, pady=10)
root.mainloop()

ttk 사용 시 기본 위젯이 시스템 네이티브 테마에 맞춰 자동 스타일링된다.

7. 간단 예제: 계산기 만들기

import tkinter as tk

def calculate():
    expr = entry.get()
    result.set(eval(expr))

root = tk.Tk()
root.title("계산기")
entry = tk.Entry(root, width=16)
entry.grid(row=0, column=0, columnspan=4)
result = tk.StringVar()
label = tk.Label(root, textvariable=result)
label.grid(row=1, column=0, columnspan=4)

buttons = [
    ('7',1,0),('8',1,1),('9',1,2),('/',1,3),
    ('4',2,0),('5',2,1),('6',2,2),('*',2,3),
    ('1',3,0),('2',3,1),('3',3,2),('-',3,3),
    ('0',4,0),('.',4,1),('=',4,2),('+',4,3),
]
for (text,row,col) in buttons:
    btn = tk.Button(root, text=text, command=lambda t=text: entry.insert(tk.END, t) if t!='=' else calculate())
    btn.grid(row=row, column=col, sticky="nsew")

root.mainloop()

간단하지만 위젯, 레이아웃 관리, 이벤트 호출을 모두 경험할 수 있는 실습 예제다.

8. tkinter와 타 GUI 라이브러리 비교

항목 tkinter PyQt / PySide wxPython
포함 여부 Python 표준 포함 별도 설치 필요 별도 설치 필요
학습 곡선 초급~중급 중급~고급 중급
네이티브 느낌 ttk 사용 시 가능 우수 우수
라이선스 Python 라이선스 GPL / 상업용 wxWindows 라이선스
GUI 복잡도 간단~중어플 복잡한 GUI에도 적합 중~대형 어플 적합

보다 복잡한 GUI나 상업적 프로젝트에는 PyQt/PySide나 wxPython이 적합한 선택일 수 있다.

9. 실무 팁 정리

  • 작은 툴이나 학습 목적 → tkinter 추천
  • OS 호환성 고려 → 표준 포함, 설치 필요 없음
  • 디자인 통일성 중요 시 → ttk 사용 권장
  • 복잡한 GUI 프로젝트 → PySide / PyQt 고려

10. 결론

Tkinter는 Python 사용자를 위한 진입 장벽이 낮은 GUI 도구이다. 간단한 도구를 빠르게 만들거나, GUI 교육 목적으로 매우 적합하다. 다만 대규모 또는 상업용 GUI에는 더 강력한 PyQt/PySide 등이 더 나은 선택일 수 있다. 모던한 테마와 이벤트 처리, 레이아웃 관리를 제대로 익히면, 나만의 GUI 도구도 얼마든지 제작 가능하다.


출처 (References)

728x90
반응형