본문 바로가기
Python

[Python] tkinter으로 GUI 프로그램 만들기 : Todo 리스트

by teamnova 2025. 6. 19.
728x90

안녕하세요!
이번 글에서는 파이썬의 표준 GUI 라이브러리인 tkinter를 이용해 간단한 Todo 리스트 프로그램을 만들어보겠습니다.

 

1. 준비물

  • Python 설치
    Python 3.x 버전이 설치되어 있어야 합니다.

  • tkinter
    tkinter는 파이썬에서 그래픽 사용자 인터페이스(GUI) 프로그램을 만들 수 있게 해주는 표준 라이브러리입니다.
    복잡한 설정 없이 간단하게 윈도우, 버튼, 입력창 등을 만들 수 있습니다.

    대부분의 Python 배포판에는 tkinter가 기본 포함되어 있습니다.
    만약 아래 코드에서 오류가 난다면, 아래 명령어로 설치해주세요.
pip install tk

 

2. Todo 리스트 프로그램 만들기

import tkinter as tk                # tkinter 모듈을 불러옵니다.
from tkinter import messagebox      # 메시지 박스(알림창) 기능을 사용합니다.

# "추가" 버튼을 눌렀을 때 실행되는 함수입니다.
def add_task():
    task = entry.get()              # 입력창(entry)에서 텍스트를 가져옵니다.
    if task:                        # 만약 입력한 내용이 있다면,
        listbox.insert(tk.END, task) # 리스트박스의 맨 아래에 추가합니다.
        entry.delete(0, tk.END)     # 입력창을 비웁니다.
    else:
        # 입력이 없을 때 경고창을 띄웁니다.
        messagebox.showwarning("입력 오류", "할 일을 입력하세요!")

# "삭제" 버튼을 눌렀을 때 실행되는 함수입니다.
def delete_task():
    selected = listbox.curselection() # 리스트박스에서 선택된 항목의 인덱스를 가져옵니다.
    if selected:                      # 만약 선택된 항목이 있다면,
        listbox.delete(selected)      # 해당 항목을 리스트박스에서 삭제합니다.
    else:
        # 아무것도 선택하지 않았을 때 경고창을 띄웁니다.
        messagebox.showwarning("선택 오류", "삭제할 할 일을 선택하세요!")

# 메인 윈도우(프로그램 창)를 생성합니다.
root = tk.Tk()
root.title("간단한 TODO 리스트")         # 창의 제목을 설정합니다.
root.geometry("300x400")                # 창의 크기를 가로 300, 세로 400으로 지정합니다.

# 할 일을 입력받는 입력창(Entry)을 만듭니다.
entry = tk.Entry(root, width=30, bg="white", fg="black")
entry.pack(pady=10)                     # 위젯을 창에 배치하고, 위아래로 여백을 줍니다.
entry.focus_set()                       # 프로그램 실행 시 입력창에 자동으로 커서가 오게 합니다.

# "추가" 버튼을 만듭니다. 클릭하면 add_task 함수가 실행됩니다.
add_btn = tk.Button(root, text="추가", width=10, command=add_task)
add_btn.pack(pady=5)

# 할 일 목록을 보여주는 리스트박스(Listbox)를 만듭니다.
listbox = tk.Listbox(root, width=40, height=10)
listbox.pack(pady=10)

# "삭제" 버튼을 만듭니다. 클릭하면 delete_task 함수가 실행됩니다.
del_btn = tk.Button(root, text="삭제", width=10, command=delete_task)
del_btn.pack(pady=5)

# 이벤트 루프를 시작합니다. (프로그램이 종료될 때까지 창을 유지)
root.mainloop()