Chapter 22. 목록 컨트롤

IT 지식 / Python·2026.08.26
TKINTER GUIDE
Chapter 22. 목록 컨트롤
Tkinter에서 여러 개의 데이터를 화면에 표시하는 목록 컨트롤에 대해 알아봅니다.

22.1 목록 컨트롤이란?

목록 컨트롤(List Control)은 여러 개의 데이터를 목록 형태로 화면에 표시하는 위젯입니다.

회원 목록, 게시글 목록, 상품 목록처럼 여러 개의 데이터를 한 번에 보여줄 때 사용합니다.

Tkinter에서 많이 사용하는 목록 관련 컨트롤은 다음과 같습니다.

  • Listbox: 간단한 목록 표시
  • Treeview: 표(Table) 형태의 목록 표시
  • Scrollbar: 목록의 스크롤 기능 제공

이번 장에서는 Listbox, Treeview, Scrollbar의 기본 사용 방법을 알아봅니다.

22.2 Listbox

Listbox는 여러 개의 문자열 데이터를 목록 형태로 표시하는 컨트롤입니다.

학생 이름, 상품 이름, 메뉴 목록처럼 간단한 데이터를 표시할 때 사용할 수 있습니다.

Listbox 생성
Python
import tkinter as tk

window = tk.Tk()

listbox = tk.Listbox(window)
listbox.pack()
listbox.insert(tk.END, "홍길동")
listbox.insert(tk.END, "김철수")
listbox.insert(tk.END, "이영희")
window.mainloop()

tk.Listbox()를 이용하면 Listbox를 만들 수 있습니다.

tk.END는 목록의 마지막 위치를 의미합니다.
실행 화면
여러 개의 데이터 추가
Python
names = ["홍길동", "김철수", "이영희"]

for name in names:
    listbox.insert(tk.END, name)
선택한 항목의 위치 가져오기
Python
index = listbox.curselection()

print(index)


선택한 데이터 가져오기
Python
index = listbox.curselection()

if index:
    print(listbox.get(index[0]))


데이터 삭제
Python
listbox.delete(0)

첫 번째 데이터를 삭제하려면 위와 같이 작성합니다.

Python
listbox.delete(0, tk.END)

전체 데이터를 삭제하려면 시작 위치와 마지막 위치를 지정합니다.

22.3 Listbox 예제
Python
import tkinter as tk

window = tk.Tk()
window.title("이름 목록")
window.geometry("300x200")

listbox = tk.Listbox(window, width=20, height=5)
listbox.pack(pady=20)

names = ["홍길동", "김철수", "이영희"]

for name in names:
    listbox.insert(tk.END, name)

window.mainloop()

이 프로그램을 실행하면 Listbox에 세 명의 이름이 표시됩니다.

22.4 Treeview

Treeview는 여러 개의 데이터를 표(Table) 형태로 출력하는 컨트롤입니다.


회원관리, 게시판, 상품관리, 재고관리 프로그램 등에서 많이 사용됩니다.

Treeview는 tkinter.ttk 모듈에 포함되어 있습니다.

Python
from tkinter import ttk
22.5 Treeview 선택과 삭제
선택한 행 가져오기
Python
from tkinter import ttk
import tkinter as tk

window = tk.Tk()
window.title("Treeview 예제")
window.geometry("500x350")

# Treeview 생성
columns = ("이름", "나이", "연락처")
tree = ttk.Treeview(window, columns=columns, show="headings", height=10)

tree.heading("이름", text="이름")
tree.heading("나이", text="나이")
tree.heading("연락처", text="연락처")

tree.column("이름", width=120, anchor="center")
tree.column("나이", width=80, anchor="center")
tree.column("연락처", width=150, anchor="center")

# 샘플 데이터
tree.insert("", "end", values=("홍길동", 25, "010-1111-2222"))
tree.insert("", "end", values=("김철수", 30, "010-3333-4444"))
tree.insert("", "end", values=("이영희", 28, "010-5555-6666"))

tree.pack(pady=20, padx=20, fill="both", expand=True)


def show_selected():
    items = tree.selection()
    if items:
        item = items[0]
        values = tree.item(item)["values"]
        print(values)


def delete_selected():
    items = tree.selection()
    if items:
        tree.delete(items[0])


btn_frame = tk.Frame(window)
btn_frame.pack(pady=10)

tk.Button(btn_frame, text="선택 조회", width=12, command=show_selected).pack(side="left", padx=5)
tk.Button(btn_frame, text="선택 삭제", width=12, command=delete_selected).pack(side="left", padx=5)

window.mainloop()

  • selection() : 현재 선택된 항목을 반환합니다.
  • item(item)["values"] : 선택한 행의 데이터를 가져옵니다.
  • delete(items[0]) : 선택한 첫 번째 행을 삭제합니다.
  • insert("", "end", values=(...)) : 새로운 행을 추가합니다.
  • heading() : 열 제목을 설정합니다.
  • column() : 열의 너비와 정렬을 설정합니다.

22.6 Scrollbar

Scrollbar는 목록의 내용이 화면보다 많을 때 위아래 또는 좌우로 이동할 수 있도록 해주는 컨트롤입니다.

Listbox나 Treeview와 함께 사용하는 경우가 많습니다.

Scrollbar 생성
Python
scroll = tk.Scrollbar(window)
Listbox와 연결
Python
import tkinter as tk

window = tk.Tk()
window.title("Scrollbar 예제")
window.geometry("300x250")

# 세로 스크롤바
v_scroll = tk.Scrollbar(window, orient="vertical")
v_scroll.pack(side="right", fill="y")

# 가로 스크롤바
h_scroll = tk.Scrollbar(window, orient="horizontal")
h_scroll.pack(side="bottom", fill="x")

# Listbox 연결
listbox = tk.Listbox(
    window,
    yscrollcommand=v_scroll.set,
    xscrollcommand=h_scroll.set,
)
listbox.pack(side="left", fill="both", expand=True)

v_scroll.config(command=listbox.yview)
h_scroll.config(command=listbox.xview)

window.mainloop()

Listbox와 Scrollbar는 서로 연결해야 합니다.

22.7 Treeview와 Scrollbar 연결
Python
import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.title("Scrollbar 예제")
window.geometry("300x250")

# 세로 스크롤바
v_scroll = tk.Scrollbar(window, orient="vertical")
v_scroll.pack(side="right", fill="y")

# 가로 스크롤바
h_scroll = tk.Scrollbar(window, orient="horizontal")
h_scroll.pack(side="bottom", fill="x")

# Treeview 연결
tree = ttk.Treeview(
    window,
    columns=("이름", "나이", "연락처"),
    show="headings",
    yscrollcommand=v_scroll.set,
    xscrollcommand=h_scroll.set,
)
tree.heading("이름", text="이름")
tree.heading("나이", text="나이")
tree.heading("연락처", text="연락처")
tree.column("이름", width=100)
tree.column("나이", width=60)
tree.column("연락처", width=150)

tree.insert("", "end", values=("홍길동", 25, "010-1111-2222"))
tree.insert("", "end", values=("김철수", 30, "010-3333-4444"))
tree.insert("", "end", values=("이영희", 28, "010-5555-6666"))
tree.insert("", "end", values=("박민수", 22, "010-7777-8888"))
tree.insert("", "end", values=("최지우", 35, "010-9999-0000"))
for i in range(6, 21):
    tree.insert("", "end", values=(f"회원{i}", 20 + i, f"010-0000-{i:04d}"))

tree.pack(side="left", fill="both", expand=True)

v_scroll.config(command=tree.yview)
h_scroll.config(command=tree.xview)

window.mainloop()

side="left"side="right"를 이용하여 Treeview와 Scrollbar를 나란히 배치합니다.

22.8 Entry와 Treeview 사용하기
Python
import tkinter as tk
from tkinter import ttk, messagebox


def add_member():
    name = entry_name.get().strip()
    age = entry_age.get().strip()

    if not name or not age:
        messagebox.showwarning("입력 오류", "이름과 나이를 모두 입력하세요.")
        return

    tree.insert("", tk.END, values=(name, age))
    entry_name.delete(0, tk.END)
    entry_age.delete(0, tk.END)
    entry_name.focus()


def delete_member():
    selected = tree.selection()
    if not selected:
        messagebox.showinfo("알림", "삭제할 항목을 선택하세요.")
        return
    tree.delete(selected[0])


window = tk.Tk()
window.title("회원 관리")
window.geometry("480x420")
window.resizable(False, False)

# 제목
tk.Label(
    window,
    text="회원 관리 프로그램",
    font=("맑은 고딕", 14, "bold"),
).pack(pady=(15, 10))

# 입력 영역
input_frame = tk.Frame(window)
input_frame.pack(pady=5)

tk.Label(input_frame, text="이름 :", font=("맑은 고딕", 10)).grid(
    row=0, column=0, sticky="e", padx=5, pady=5
)
entry_name = tk.Entry(input_frame, width=25, font=("맑은 고딕", 10))
entry_name.grid(row=0, column=1, padx=5, pady=5)

tk.Label(input_frame, text="나이 :", font=("맑은 고딕", 10)).grid(
    row=1, column=0, sticky="e", padx=5, pady=5
)
entry_age = tk.Entry(input_frame, width=25, font=("맑은 고딕", 10))
entry_age.grid(row=1, column=1, padx=5, pady=5)

# 버튼 영역
btn_frame = tk.Frame(window)
btn_frame.pack(pady=10)

tk.Button(btn_frame, text="추가", width=10, command=add_member).pack(
    side="left", padx=8
)
tk.Button(btn_frame, text="삭제", width=10, command=delete_member).pack(
    side="left", padx=8
)

# Treeview + Scrollbar
list_frame = tk.Frame(window)
list_frame.pack(padx=20, pady=10, fill="both", expand=True)

v_scroll = tk.Scrollbar(list_frame, orient="vertical")
v_scroll.pack(side="right", fill="y")

h_scroll = tk.Scrollbar(list_frame, orient="horizontal")
h_scroll.pack(side="bottom", fill="x")

tree = ttk.Treeview(
    list_frame,
    columns=("name", "age"),
    show="headings",
    height=10,
    yscrollcommand=v_scroll.set,
    xscrollcommand=h_scroll.set,
)
tree.heading("name", text="이름")
tree.heading("age", text="나이")
tree.column("name", width=220, anchor="center")
tree.column("age", width=120, anchor="center")
tree.pack(side="left", fill="both", expand=True)

v_scroll.config(command=tree.yview)
h_scroll.config(command=tree.xview)

# 샘플 데이터
tree.insert("", tk.END, values=("홍길동", 25))
tree.insert("", tk.END, values=("김철수", 30))
tree.insert("", tk.END, values=("이영희", 28))

entry_name.focus()
window.mainloop()

사용자가 이름과 나이를 입력한 후 추가 버튼을 클릭하면 입력한 데이터가 Treeview에 표시됩니다.

22.9 목록 프로그램의 기본 구조

실무에서 회원관리, 상품관리, 재고관리 등의 프로그램은 다음과 같은 구조를 많이 사용합니다.

구조
Window

├── 입력 영역
│ ├── Label
│ ├── Entry
│ └── Button

└── 목록 영역
├── Treeview
└── Scrollbar

입력 영역에서 데이터를 입력하고 버튼을 클릭하면 목록 영역의 Treeview에 데이터가 표시되는 구조입니다.

이러한 화면 구조를 익혀두면 이후 다양한 관리 프로그램을 만들 때 활용할 수 있습니다.

이러한 구조는 이후 회원관리, 상품관리, 게시판, 재고관리 프로그램을 만드는 기본 구조가 됩니다.

a computer screen with a bunch of code on it
📌 Chapter 22 핵심 정리
  • 목록 컨트롤은 여러 개의 데이터를 목록 형태로 표시하는 위젯이다.
  • Listbox는 간단한 문자열 목록을 표시할 때 사용한다.
  • Treeview는 여러 개의 컬럼을 가지는 표 형태의 데이터를 표시할 때 사용한다.
  • Scrollbar를 연결하면 데이터가 많아졌을 때 화면을 스크롤할 수 있다.
  • Treeview는 실제 관리 프로그램에서 많이 사용되므로 데이터 추가, 선택, 삭제 방법을 익혀두는 것이 좋다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기