Tkinter의 리스트박스(Listbox) 위젯은 세로로 나열된 메뉴 항목을 스크롤할 수 있는 상자 형태로 화면에 표시하는 데 사용됩니다. 사용자는 이 위젯에서 항목을 하나만 선택할 수도 있고, 여러 개를 동시에 선택할 수도 있습니다.
그런데 Tkinter에서 모든 위젯은 기본적으로 세로 또는 가로 방향으로 정렬되기 때문에, 창 크기를 조절할 때 위젯의 위치와 크기를 적절하게 유지하는 것이 다소 까다로울 수 있습니다.
expand와 fill 옵션으로 위젯 크기 조정하기
이 문제는 pack() 메서드에 expand=True와 fill=BOTH 옵션을 함께 사용하면 간단히 해결할 수 있습니다.
- fill=BOTH : 위젯이 할당된 공간 안에서 가로와 세로 방향으로 모두 늘어나도록 설정합니다.
- expand=True : 창에 여유 공간이 생길 때 위젯이 그 공간까지 확장되어 채우도록 합니다.
참고로 fill 옵션에는 X(가로 방향만), Y(세로 방향만), BOTH(양방향), NONE(기본값)을 지정할 수 있으므로, 상황에 따라 원하는 방향만 선택적으로 늘리는 것도 가능합니다.
예제 코드
# tkinter 라이브러리 임포트
from tkinter import *
# Tkinter 프레임(창) 인스턴스 생성
win = Tk()
# 창의 크기 설정
win.geometry("750x250")
# 리스트박스 위젯 생성
listbox = Listbox(win)
listbox.pack(padx=10, pady=10, fill=BOTH, expand=True)
# fill=BOTH : 위젯을 가로·세로 방향으로 모두 늘림
# expand=True : 위젯이 남은 공간을 채우며 확장됨
listbox.insert(1, "Python")
listbox.insert(2, "Java")
listbox.insert(3, "C++")
listbox.insert(4, "Rust")
listbox.insert(5, "GoLang")
listbox.insert(6, "C#")
listbox.insert(7, "JavaScript")
listbox.insert(8, "R")
listbox.insert(9, "Php")
win.mainloop()실행 결과
위 코드를 실행하면 다양한 프로그래밍 언어가 담긴 리스트박스가 화면에 나타납니다.

이후 창 크기를 조절해 보면, 리스트박스가 창 크기에 맞춰 너비와 높이를 자동으로 유지하며 늘어나는 것을 확인할 수 있습니다. 이처럼 expand와 fill 옵션을 활용하면 반응형 레이아웃을 손쉽게 구성할 수 있습니다.