본문 바로가기

[Tkinter] 26강 Listbox 선택 이벤트와 Scrollbar 함께 사용하기

@도마22026. 2. 2. 21:00
728x90


이 강의는 Tkinter GUI 강의 26강입니다

25강에서는
Listbox 위젯을 사용해
목록 항목을 선택하는 기본 방법을 배웠습니다.

이번 강의에서는
Listbox를 실전에서 제대로 쓰기 위해 꼭 필요한 두 가지를 다룹니다.

  • 선택 이벤트 처리
  • Scrollbar와 함께 사용하기

이번 강의의 목표는 분명합니다.
Listbox 선택이 언제, 어떻게 감지되는지 이해하고,
항목이 많아도 사용 가능한 UI를 만드는 것입니다.


Listbox 선택 이벤트는 언제 발생할까

Listbox는
사용자가 항목을 클릭하거나
키보드로 선택을 바꿀 때
이벤트를 발생시킵니다.

이 이벤트의 이름은
<<ListboxSelect>> 입니다.


Listbox 선택 이벤트 기본 형태

listbox.bind("<<ListboxSelect>>", 함수)

이 이벤트는
선택이 바뀔 때마다 자동으로 호출됩니다.


선택 이벤트 기본 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

listbox = tk.Listbox(window)
listbox.pack(pady=20)

items = ["사과", "바나나", "오렌지"]
for item in items:
    listbox.insert(tk.END, item)

def on_select(event):
    index = listbox.curselection()
    if index:
        print(listbox.get(index[0]))

listbox.bind("<<ListboxSelect>>", on_select)

window.mainloop()

항목을 클릭할 때마다
선택된 값이 출력됩니다.


curselection()은 항상 튜플이다

중요한 포인트 하나입니다.

index = listbox.curselection()
  • 반환값은 항상 튜플
  • 선택이 없으면 빈 튜플
  • 단일 선택이어도 튜플

그래서
항상 존재 여부를 먼저 확인해야 합니다.


다중 선택일 때 이벤트 처리

다중 선택 모드에서는
여러 인덱스가 반환됩니다.

listbox = tk.Listbox(window, selectmode=tk.MULTIPLE)
def on_select(event):
    indexes = listbox.curselection()
    for i in indexes:
        print(listbox.get(i))

선택된 모든 항목을
순회하면서 처리할 수 있습니다.


Listbox에 Scrollbar가 필요한 이유

Listbox 항목이
많아지면
한 화면에 모두 표시할 수 없습니다.

이때
Scrollbar를 연결해야
사용 가능한 UI가 됩니다.


Scrollbar 기본 개념

Scrollbar는
단독으로는 의미가 없고
다른 위젯과 연결해서 사용합니다.

Listbox와 연결할 때는
yscrollcommand 옵션을 사용합니다.


Listbox + Scrollbar 기본 구조

frame = tk.Frame(window)
frame.pack(fill="both", expand=True)

scrollbar = tk.Scrollbar(frame)
scrollbar.pack(side="right", fill="y")

listbox = tk.Listbox(frame, yscrollcommand=scrollbar.set)
listbox.pack(side="left", fill="both", expand=True)

scrollbar.config(command=listbox.yview)

이 구조는
거의 모든 Listbox UI의 기본 형태입니다.


Listbox + Scrollbar 전체 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

frame = tk.Frame(window)
frame.pack(fill="both", expand=True)

scrollbar = tk.Scrollbar(frame)
scrollbar.pack(side="right", fill="y")

listbox = tk.Listbox(frame, yscrollcommand=scrollbar.set)
listbox.pack(side="left", fill="both", expand=True)

scrollbar.config(command=listbox.yview)

for i in range(30):
    listbox.insert(tk.END, f"항목 {i+1}")

window.mainloop()

이제
항목이 많아도
스크롤로 정상 선택이 가능합니다.


이벤트와 Scrollbar는 함께 잘 동작한다

Scrollbar를 사용해도
Listbox 선택 이벤트는
정상적으로 발생합니다.

def on_select(event):
    index = listbox.curselection()
    if index:
        print(listbox.get(index[0]))

listbox.bind("<<ListboxSelect>>", on_select)

UI 구조가 복잡해져도
이벤트 처리 방식은 변하지 않습니다.


Listbox 실전 사용 패턴

실전에서는
다음 패턴이 가장 많이 사용됩니다.

  • Frame으로 영역 분리
  • Listbox + Scrollbar 결합
  • 선택 이벤트로 값 처리

이 구조를 기억해두면
다양한 프로그램에 응용할 수 있습니다.


Listbox는 언제 가장 많이 쓰일까

Listbox는
다음과 같은 화면에서 자주 사용됩니다.

  • 파일 목록
  • 로그 목록
  • 아이템 리스트
  • 선택 기반 UI

다음 강의에서는
Listbox보다 더 현대적인
Combobox 위젯을 다룹니다.


이번 강의 핵심 정리

이번 강의에서 꼭 기억해야 할 내용입니다.

  • Listbox 선택 이벤트는 <<ListboxSelect>>
  • curselection()은 항상 튜플이다
  • 항목이 많으면 Scrollbar를 함께 사용한다
  • Frame으로 구조를 잡는 것이 핵심이다

다음 강의 예고

다음 강의에서는
Combobox(ttk) 를 사용해
드롭다운 선택 UI를 만드는 방법을 배웁니다.

Listbox와의 차이가
명확하게 느껴질 것입니다.


728x90
도마2
@도마2 :: 도마의 코드노트

초보자를 위한 코딩 강의를 정리합니다. 파이썬부터 C#, Unity 게임 제작까지 차근차근 기록합니다. — 도마

목차