본문 바로가기

[Tkinter] 20강 fill과 expand 옵션 완벽 이해하기

@도마22026. 1. 30. 21:00
728x90


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

19강에서는
위젯의 크기가
왜 고정되거나 자동으로 늘어나는지
그 기본 원리를 배웠습니다.

이번 강의에서는
그중에서도 특히 헷갈리기 쉬운
fill과 expand 옵션
집중적으로 다룹니다.

이번 강의의 목표는 분명합니다.
fill과 expand의 역할을 명확히 구분하고,
실전에서 언제 어떻게 써야 하는지
확실한 기준을 만드는 것입니다.


fill과 expand는 항상 함께 등장한다

pack 레이아웃을 쓰다 보면
다음과 같은 코드를 자주 보게 됩니다.

pack(fill="both", expand=True)

하지만
이 두 옵션은
같은 역할이 아닙니다.

헷갈리는 이유는
효과가 비슷해 보이기 때문입니다.


fill 옵션의 정확한 역할

fill은
위젯의 크기를 늘리는 옵션입니다.

부모 위젯이 가진 공간 중
얼마를 채울 것인지를 결정합니다.

tk.Button(window, text="버튼").pack(fill="x")

이 코드는
버튼이
가로 방향으로만
늘어나게 합니다.


fill 옵션 종류 정리

fill 옵션에는
다음 네 가지 값이 있습니다.

  • fill=None : 확장하지 않음
  • fill="x" : 가로 방향 채움
  • fill="y" : 세로 방향 채움
  • fill="both" : 가로 + 세로 채움

fill만 사용했을 때의 한계

fill 옵션만 사용하면
항상 기대한 결과가 나오지는 않습니다.

import tkinter as tk


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


tk.Button(window, text="fill만 사용").pack(fill="both")


window.mainloop()

버튼은
자기 영역 안에서만
늘어납니다.

남는 공간을
차지하지는 않습니다.


expand 옵션의 정확한 역할

expand는
남는 공간을 위젯이 가져갈지 결정합니다.

tk.Button(window, text="expand만 사용").pack(expand=True)

이 옵션은
위젯의 크기를 늘리지는 않지만
위젯이 차지하는 영역 자체를 키웁니다.


expand만 사용했을 때의 모습

import tkinter as tk


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


tk.Button(window, text="expand만").pack(expand=True)


window.mainloop()

버튼은
중앙에 위치하지만
크기는 변하지 않습니다.


fill과 expand를 함께 사용하면

이제
가장 많이 쓰는 조합을 보겠습니다.

tk.Button(
window,
text="fill + expand"
).pack(fill="both", expand=True)

이 조합을 사용하면

  • 위젯이 차지하는 영역이 늘어나고
  • 그 영역을 위젯이 모두 채웁니다

이것이
자동 확장의 완성 형태입니다.


두 개의 위젯으로 비교해보기

import tkinter as tk


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


tk.Button(window, text="위").pack(fill="x")
tk.Button(window, text="아래").pack(fill="both", expand=True)


window.mainloop()

아래 버튼만
창 크기에 맞게
늘어나는 것을 확인할 수 있습니다.


expand는 공간 분배와 관련 있다

expand는
“누가 남는 공간을 가질 것인가”에
대한 옵션입니다.

tk.Label(window, text="A").pack(expand=True)
tk.Label(window, text="B").pack(expand=True)

이 경우
두 Label이
남는 공간을
나눠서 차지합니다.


fill과 expand 선택 기준

정리하면
다음 기준으로 선택하면 됩니다.

  • 위젯 크기를 늘리고 싶다 → fill
  • 남는 공간을 차지하게 하고 싶다 → expand
  • 둘 다 필요하다 → fill + expand

이 기준만 기억해도
레이아웃이 훨씬 안정됩니다.


grid에는 fill과 expand가 없다

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

fill과 expand는
pack 전용 옵션입니다.

grid에서는
대신 다음을 사용합니다.

  • sticky
  • rowconfigure / columnconfigure

이 차이를
명확히 구분해야 합니다.


자동 확장은 의도적으로 설계해야 한다

창이 커질 때
모든 위젯이
늘어나야 하는 것은 아닙니다.

  • 입력창은 늘어나고
  • 버튼은 고정되고
  • 제목은 중앙에 유지

이런 식으로
의도를 먼저 정해야 합니다.


이번 강의 핵심 정리

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

  • fill은 위젯의 크기를 늘린다
  • expand는 남는 공간을 차지하게 한다
  • 둘은 역할이 다르다
  • 함께 쓰는 경우가 가장 많다

다음 강의 예고

다음 강의에서는
입력 위젯의 본격적인 시작
Checkbutton 위젯을 다룹니다.

이제부터는
UI가 아니라
사용자 입력 처리 단계로 들어갑니다.


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

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

목차