파이썬/파이썬(python) 중급

[27-7 파이썬] Tkinter 레이아웃 매니저 pack(), place(), grid(), 여백주기 padding

Olivia-BlackCherry 2022. 9. 15. 16:46

Tkinter Layout Manager

Tkinter 레이아웃 매니저는
pack(), place(), gird()가 있다.

이들은
GUI 프로그램 위젯의 배치하는 방법을 정의한다.
단, 같은 프로그램 내에서 혼용하여 사용할 수는 없으니
본인이 편한 것을 선택해서 사용한다.

my_label을 생성한다.

my_label =Label(text = "my_label")

 

pack()

디폴트 값은 위에서 중간이다.
파라미터 side로 위치를 조정한다.
left, right, bottom...

my_label.pack(side="left")

단점: 위치를 정확하게 정의하기가 어렵다.

place()

정확한 위치에 놓을 수 있다.
파라미터 x, y 좌표로 원하는 위치를 정확히 조정하기 때문이다.
아래의 경우 가장 위-왼쪽에 위치하며,
x, y 값을 조정하며 섬세하게 조절이 가능하다.

my_label.place(x=0, y=0)

단점: 너무 구체적이라서 위치 좌표를 정확히 정하는 것이 귀찮다.


grid()

격자의 의미이다.

열 column 과 행 row 으로 나눈다.
열은 세로축, 행은 가로축이다.
grid는 행과 열로 레이아웃을 배치한다.

 

grid는 머리속으로 레이아웃이 잘 그려지기 때문에 많은 개발자들의 선택을 많이 받는다!
아래의 경우 위-왼쪽에 위치한다.

my_label.gird(column=0, row=0)



참고할 점은,
grid는 다른 컴포넌트에 영향을 받는다.

my_label.gird(column=3, row=3)

으로 바꿔도 my_label의 위치가 변하지 않는 것을 알 수 있다.

왜냐면 그 전에 어떤 컴포넌트도 배치되어 있지 않기에
여전히 my_label이 첫 번째 열, 첫 번째 행인 상황이다.

따라서 grid를 가지고 레이아웃을 배치할 때는

1) 최종 컴포넌트들 간 배치를 먼저 예상하고, 

2) 그 위치를 행과 열로 계산한 후,
3) 한번에 순서대로 배치해버리는 것이

차후 작업하기 편리하다.

my_label.grid(column=0, row=0)
my_button.grid(column=1, row=1)
my_entry.grid(column=2, row=2)
my_label    
  my_button  
    my_entry

 

my_label.grid(column=0, row=0)
my_button.grid(column=1, row=1)
my_entry.grid(column=2, row=0)
my_radiobutton.gird(column=3, row=2)
my_label   my_entry  
  my_button    
      my_radiobutton

 

config(padx=?, pady=?)

주위에 여백을 주는 것으로
파라미터 padx는 x축을 기준으로, pady는 y축을 기준으로 줄 여백의 크기를 정한다.

window = TK()
window.config(padx=20, pady=20)

윈도우에 패딩을 주면 전체 프로그램의 가장 자리에 여백을 준다.

 

my_label.config(padx=20, pady=50)

다른 위젯을 밀어내고, 특정 위젯 주위에만 여백을 준다.

위젯 주위에 여백을 추가하는 것은 위젯들이 작은 공간에 몰려있지 않도록 하고,
레이아웃과 디자인을 편집하는데 도움이 된다.