일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 문자열
- 오피스
- Android
- office
- git
- 파이썬GUI
- python
- 윈도우10
- 깃
- 아웃룩
- win32com
- windows
- pyqt5
- 파이썬3
- 윈도우11
- pandas
- Excel
- 엑셀
- Outlook
- Windows10
- 비주얼베이직
- 안드로이드
- 파이썬
- 파워포인트
- python3
- Windows11
- pythongui
- html
- matlab
- VBA
Appia의 IT세상
파이썬[Python] 022 tkinter 기본강의 002 pack(), grid(), place() 본문
파이썬[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가지 방법에 대해서 살펴보았습니다. 실제 코딩에는 닶이 없듯이, 사용에 있어서 답은 없습니다. 사용해보시고, 편하신 것으로 사용하시면 됩니다. 혹, 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.
'Python > Python Tk (GUI)' 카테고리의 다른 글
파이썬[Python] 026 tkinter 기본강의 006 Message, Radiobutton (0) | 2020.01.02 |
---|---|
파이썬[Python] 025 tkinter 기본강의 005 Menu, Menubutton (0) | 2020.01.02 |
파이썬[Python] 024 tkinter 기본강의 004 Frame, Label, Listbox (0) | 2020.01.01 |
파이썬[Python] 023 tkinter 기본강의 003 checkbutton, Entry (0) | 2020.01.01 |
파이썬[Python] 021 GUI모듈 tkinter기본강의 001 button, Canvas (0) | 2019.12.31 |