Tkinter에서 여러 열(column)을 포함한 항목 목록을 화면에 표시하고 싶다면 Treeview 위젯을 활용하면 됩니다. Treeview는 대량의 데이터를 목록 형태로 보여줄 수 있으며, 스타일과 속성을 자유롭게 커스터마이징할 수 있는 강력한 위젯입니다.
그런데 데이터가 많아지면 창 높이를 넘어서는 항목들이 잘리게 되는데, 이때 세로 스크롤바(Scrollbar)를 연결해 주면 사용자가 전체 목록을 손쉽게 탐색할 수 있습니다. 이 글에서는 Scrollbar 생성자를 정의하고 command 옵션으로 Treeview와 연동하는 방법을 예제와 함께 살펴보겠습니다.
구현 방법
세로 스크롤바를 Treeview에 연결하는 핵심은 두 가지 설정입니다.
1. treeScroll.configure(command=tree.yview) — 스크롤바를 움직이면 Treeview의 뷰가 함께 스크롤됩니다.
2. tree.configure(yscrollcommand=treeScroll.set) — Treeview의 내용이 변경되면 스크롤바 위치가 자동으로 갱신됩니다.
두 위젯이 서로를 참조하는 양방향 연결 구조이기 때문에, 한쪽만 설정하면 스크롤바가 정상적으로 작동하지 않으니 반드시 둘 다 설정해야 합니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
# Style 위젯 인스턴스 생성 및 테마 적용
style = ttk.Style()
style.theme_use('clam')
# Treeview 위젯 추가 및 선택 모드 설정
tree = ttk.Treeview(win, column=("c1", "c2"), show='headings', height=8, selectmode="browse")
tree.column("#1", anchor=CENTER, stretch=NO)
tree.heading("#1", text="이름(Fname)")
tree.column("#2", anchor=CENTER, stretch=NO)
tree.heading("#2", text="성(Lname)")
# Treeview에 데이터 삽입
tree.insert('', 'end', text="1", values=('Alex', 'M'))
tree.insert('', 'end', text="2", values=('Belinda', 'Cross'))
tree.insert('', 'end', text="3", values=('Ravi', 'Malviya'))
tree.insert('', 'end', text="4", values=('Suresh', 'Rao'))
tree.insert('', 'end', text="5", values=('Amit', 'Fernandiz'))
tree.insert('', 'end', text="6", values=('Raghu', 'Sharma'))
tree.insert('', 'end', text="7", values=('David', 'Nash'))
tree.insert('', 'end', text="8", values=('Ethan', 'Plum'))
tree.insert('', 'end', text="9", values=('Janiece', '-'))
# Treeview 위젯에 세로 스크롤바 추가
treeScroll = ttk.Scrollbar(win)
treeScroll.configure(command=tree.yview)
tree.configure(yscrollcommand=treeScroll.set)
treeScroll.pack(side=RIGHT, fill=BOTH)
tree.pack()
win.mainloop()실행 결과
위 코드를 실행하면 Treeview 위젯에 이름 목록이 표시된 창이 나타나고, 오른쪽에는 해당 목록과 연동된 세로 스크롤바가 함께 배치됩니다. 스크롤바를 드래그하거나 마우스 휠을 사용하면 height=8로 지정된 화면 영역보다 많은 9개 항목을 모두 확인할 수 있습니다.

추가 팁
만약 ttk.Scrollbar 대신 일반 tkinter.Scrollbar를 사용해도 동작하지만, ttk 버전을 사용하면 적용 중인 테마('clam' 등)에 맞춰 외관이 자동으로 통일되어 더 깔끔한 UI를 만들 수 있습니다. 또한 fill=Y를 사용하면 스크롤바가 세로 방향으로만 늘어나므로 상황에 따라 BOTH와 Y 중 적절한 값을 선택하시기 바랍니다.