Appia의 IT세상

파이썬[Python] 022 tkinter 기본강의 002 pack(), grid(), place() 본문

Python/Python Tk (GUI)

파이썬[Python] 022 tkinter 기본강의 002 pack(), grid(), place()

Appia 2019. 12. 31. 21:00
반응형

오늘은 저번 포스팅에 이어서 위젯을 윈도우에 놓는 방법에 대해서 살펴보고자 합니다. 혹자들이나 외서에서는 관련해서 geometry method라고 합니다. 저도 말들을 조금 활용하여 geometry method라고 해보겠습니다. 파이썬[Python] tkinter 모듈에서 geometry method 크게 3가지가 있습니다.

 

pack() - 윈도우에 상대 위치로 widget 배치하는 방법입니다. 즉, 각 side라는 객체 속성을 바탕으로 LEFT,RIGHT,TOP,BOTTOM을 바탕으로 방향에 맞게 각 객체를 배치 해주는 방식입니다. 

  • 4가지 방향 제공 : LEFT, TOP, BOTTOM, RIGHT

다음 예제를 살펴보겠습니다.

from tkinter import *
root = Tk()
frame = Frame(root)
frame.pack()

topbutton = Button(frame, text = "Top")
topbutton.pack( side = TOP)

leftbutton = Button(frame, text = "Left")
leftbutton.pack( side = LEFT)

rightbutton = Button(frame, text = "Rigtht")
rightbutton.pack( side = RIGHT )

letf1button = Button(frame, text = "Letf1")
letf1button.pack( side = LEFT )

bottombutton = Button(frame, text = "Bottom")
bottombutton.pack( side = BOTTOM)

abottombutton = Button(frame, text = "Bottom1")
abottombutton.pack( side = BOTTOM)

root.mainloop()

먼저 실행한 결과부터 살펴보고 결과에 대해서 살펴보고 좀더 자세한 이야기를 해보고자 합니다. 

 

먼저 원칙이 하나 있습니다.  Left - Rigth, Top-Bottom 각 방향으로 상대성을 동작합니다. 만약 위의 설명에서와 같이 topbutton은 가장 위에 위치 하게 됩니다. 그런후에 Right 버튼을 생성하게 됩니다. 그다음이 이제 문제가 됩니다. 즉 Letft를 하나 더 생성하는 것입니다. 그러면 여기에서 처음 생성한 다음으로 즉, 처음 생성한 Left 버튼의 오른쪽으로 생성됩니다. 예제 코드를 바탕으로 조금이나마 이해가 되셨으면 합니다. 

 

grid() - 윈도우를 표로 나누어 표의 위치에 맞게 놓는 방법입니다. 이 부분은 다른 곳에 나와 있던 예제를 조금 수정하여 다음과 같이 표현 해보겠습다. 

 

from  tkinter import *
root = Tk(  )
b = 0
for r in range(5):
   for c in range(5):
      b = b + 1
      Button(root, text = str(b)).grid(row = r,column = c)

root.mainloop()

다음과 같은 결과가 나옵니다. 여기에서 아마 눈치 빠르신 분들은 거의 발견했을 것입니다. 

 

그럼 다음과 같이 명시가 됩니다. grid()는 윈도우를 각 칸으로 나누어 각 위젯을 배치하는 방식입니다. 여기에서 조금 조심해야 하는 부분이 있습니다. 같은 열에 크기가 다르다면, 가장 큰 길이 기준으로 칸이 지정됩니다. 

 

place() - 윈도우에 절대 위치로 각 위젯을 배치하는 구조입니다.  

 

from tkinter import *

root = Tk()

A = Button(root, text = "Add")
A.place(x = 100, y = 100)

B = Button(root, text = "Add1")
B.place(x = 10, y = 10)

C = Button(root, text = "Add2")
C.place(x = 100, y = 10)

D = Button(root, text = "Add2")
D.place(x = 10, y = 100)

root.mainloop()

위의 예제를 실행하면 다음과 같이 나타납니다. 

 

place() 부분은 별도로 설명을 안해도 될것 같습니다. x, y의 각 좌표를 입력해주시면 됩니다. 오늘은 위젯을 배치하는 3가지 방법에 대해서 살펴보았습니다. 실제 코딩에는 닶이 없듯이, 사용에 있어서 답은 없습니다. 사용해보시고, 편하신 것으로 사용하시면 됩니다. 혹, 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

 

반응형
Comments