파이썬(Python)/tkinter

파이썬 tkinter - pack란? (간격, 배치, 정렬 방법) 예제로 쉽게 이해하기

끄적끄적아무거나 2021. 9. 18. 08:51
반응형

Python tkinter pack 이란? (What is tkinter pack?)

 

grid가 엑셀처럼 행과 열로 위치를 배치했다면(https://scribblinganything.tistory.com/293), pack은 말 그대로 공간에 채워넣는 방법으로 배치하는 것이다. 아래 예제들을 통해 쉽게 이해 해보자

 


tkinter pack으로 배치하기

 

코드>>

from tkinter import * 

app = Tk() 

btn_0 = Button(app, text="top0") 
btn_0.pack(side="top")
btn_1 = Button(app, text="top1") 
btn_1.pack(side="top")

btn_2 = Button(app, text="left0") 
btn_2.pack(side="left")
btn_3 = Button(app, text="left1") 
btn_3.pack(side="left")

app.title('scribblinganything.tistory.com') 
app.geometry("300x300") 

app.mainloop()

 

결과>>

 

주석>>

pack 은 side 옵션을 사용해서 위치를 지정할 수 있다. side 값은 아래와 같다. 

  • top
  • left
  • right
  • bottom

단순히 side만 사용해서 배치하면 위 결과처럼 애매한 위치로 배정된다. 이를 해결하기 위해 label을 사용한다. 

 


label과 pack을 이용하여 배치하기

 

코드>>

from tkinter import * 

app = Tk() 

label0 = Label(app, width=50, height=5)
label0.pack()

btn_0 = Button(label0, text="top0") 
btn_0.pack(side="top")
btn_1 = Button(label0, text="top1") 
btn_1.pack(side="top")

label1 = Label(app, width=50, height=5)
label1.pack()

btn_2 = Button(label1, text="left0") 
btn_2.pack(side="left")
btn_3 = Button(label1, text="left1") 
btn_3.pack(side="left")

app.title('scribblinganything.tistory.com') 
app.geometry("300x300") 

app.mainloop()

 

결과>>

 

주석>>

label이 존재하기 때문에 top과 left 배치가 쉬워 졌다.

 

 


tkinter pack option 사용하기

 

option의 종류와 기능은 아래와 같다.

 

  • padx : x방향 외부 패딩
  • pady : y방향 외부 패딩
  • ipadx : x방향 내부 패딩
  • ipadx : y방향 내부 패딩
  • fill : 공간 채우기 (x, y, both)
  • anchor : 공간 내에 위치 채우기

 

코드>>

from tkinter import * 

app = Tk() 

label0 = Label(app)
label0.pack()

btn_0 = Button(label0, text="top0") 
btn_0.pack(side="top")

label1 = Label(app)
label1.pack(fill="both")

btn_2 = Button(label1, text="left0") 
btn_2.pack(side="left")
btn_3 = Button(label1, text="left1") 
btn_3.pack(side="left")
btn_4 = Button(label1, text="left2") 
btn_4.pack(side="left")
btn_5 = Button(label1, text="left3") 
btn_5.pack(side="left")
btn_6 = Button(label1, text="left4") 
btn_6.pack(side="left")

app.title('scribblinganything.tistory.com') 
app.geometry("300x300") 

app.mainloop()

 

결과>>

 

주석>>

fill로 채웠기 때문에 window 크기에 상관없이 라벨이 꽉채워 주기 때문에 윈도우 사이즈를 변경해도 left와 top의 위치가 따라 간다.

 

 

반응형