강의노트 위젯 위치 배치 - pack

강의노트 • 조회수 378 • 댓글 0 • 작성 1년 전 • 수정 1주 전  
  • 윈도우 프로그램

tkinter는 위젯의 위치를 관리하기 위해 세 가지 방법을 지원한다: pack( ), grid( ) 와 place( ) 이다.

pack

팩은 위젯을 기본 창이나 프레임이 될 수 있는 컨테이너 위젯(부모위젯)의 안에서 위,아래, 왼쪽, 오른쪽 방향으로 위젯을 절대위치가 아닌 상대적 위치로 위젯을 쌓아가는 방식이다.

팩은 사용하는 위젯까리 서로 영향을 미치므로 배치 순서가 중요하다.

팩 지오메트리 매니저에는 위젯을 정렬하는 다양한 옵션이 있다.

팩의 기본 형태는 아래와 같다.

widget.pack(**options)

주요 옵션들은:

옵션 설명
side 위젯을 어느 방향에 배치할지를 지정. 기본값은 'top'이다. widget.pack(side='top') #위로 붙인다.
fill 위젯이 남은 공간을 어떻게 채울지를 설정 widget.pack(fill='both') # x와 y방향으로 채움
expand 부모 위젯이 리사이징될 때 빈 공간을 차지할지 여부를 지정 widget.pack(expand=True) #남은 공간을 위젯이 차지한다.
padx, pady 바깥쪽 여백을 설정 widget.pack(padx=10, pady=5) #위젯의 바깥쪽을 좌/우로 10픽셀, 위/아래로 5픽셀의 여백을 준다.
ipadx, ipady 안쪽 여백을 설정 widget.pack(ipadx=5, ipady=10) #컨테이너에서 내부 컨텐츠와 경계 사이의 간격. 좌/우로 5픽셀, 위/아래로 10픽셀의 여백을 준다.

예제

import tkinter as tk
root = tk.Tk()
label1 = tk.Label(root, text="Top", bg="red")
label2 = tk.Label(root, text="Left", bg="green")
label3 = tk.Label(root, text="Right", bg="blue")
label4 = tk.Label(root, text="Bottom Fill X", bg="orange")
label1.pack(side="top", fill="x") # 
label2.pack(side="left", padx=10, pady=10)
label3.pack(side="right", ipadx=10, ipady=10)
label4.pack(side="bottom", fill="x", expand=True)
root.mainloop()

위 예제의 팩이 진행되는 과정을 그림으로 표현했다. 레이블1을 top이어서 root의 top에 붙여서 빨간색 위젯이 위에 붙었다. fill이 x여서 좌우를 꽉 채운다.

레이블2는 left여서 남아있는 공간에서 왼쪽에 붙이는데 padx와 pady가 10이어서 10의 여백을 두고 붙인다.

레이블3은 남은 공간의 right에 내부 여백을 10(글씨가 좌우/위아래로 10의 여백이 있다)을 두고 붙인다.

레이블4는 남은 공간에서 bottom에 붙이는데 fill이 x여서 좌우로 꽉 채워서 붙인다.

최종 결과는 아래와 같다.

side

사이드 매개변수는 팩 레이아웃에서 위젯의 방향을 결정한다.

side 매개변수에는 네 가지 옵션이 있다:

매개변수 설명
top 위젯을 위에서 아래로 정렬한다.
bottom 위젯을 아래에서 위로 정렬한다.
left 위젯을 왼쪽에서 오른쪽으로 정렬한다.
right 위젯을 오른쪽에서 왼쪽으로 정렬한다.

expand

expand는 위젯을 확장하여 컨테이너에 할당된 추가 공간을 차지할지 여부를 결정한다.

expand를 True로 설정하면 위젯이 확장되고, False로 설정하면 위젯이 확장되지 않는다. expand 매개변수의 기본값은 False이다.

expand 매개변수는 side 매개변수에 종속된다.

다음 표는 위젯의 공간과 관련하여 측면 매개변수와 확장 매개변수 간의 종속성을 보여줍니다.

이전 글
다음 글
댓글
댓글로 소통하세요.