Python tkinter 에는 GUI 화면을 구성하기 위한 여러 위젯들이 있습니다.
위젯 사용법에 대해 포스팅하려고 합니다.
모든 위젯들에대한 내용을 한 포스팅에 하기에는 너무 방대한 내용이라
각 위젯의 사용법은 링크로 연결해두고 이 글에서는 위젯을 화면에 배치하는 부분을 설명하겠습니다.
위젯 목록
아래 포스팅들을 통해 각 위젯을 만들고 사용하는 법을 익힐 수 있습니다.
1. Button Python tkinter 버튼(button) 만들기 (tistory.com)
2. Label Python tkinter Label 만들기 (tistory.com)
3. Entry Python tkinter Entry ( 입력창 ) (tistory.com)
4. Listbox Python tkinter Listbox ( 목록창 ) (tistory.com)
5. Checkbutton Python tkinter Checkbutton ( 체크버튼 ) (tistory.com)
6. Radiobutton Python tkinter Radiobutton ( 라디오버튼 ) (tistory.com)
7. Menu Python tkinter Menu ( 메뉴 ) (tistory.com)
8. Menubutton Python tkinter Menubutton (메뉴버튼) (tistory.com)
9. Canvas Python tkinter Canvas (캔버스) (tistory.com)
10. Message Python tkinter Message (tistory.com)
11. Scale Python tkinter Scale (숫자값 조정 바) (tistory.com)
12. Progressbar Python tkinter Progressbar (진행바) (tistory.com)
위젯 배치하기
위젯을 화면에 배치하는 방법에대해 살펴보겠습니다.
위젯을 화면에 배치하는 함수는 pack, grid, place가 있습니다.
pack()
- pack() 함수는 상대적 위치로 배치가 됩니다. (먼저 선언된 pack()부터 순차적으로 배치됩니다)
- grid() 함수와는 같은화면에서 같이 사용될 수 없습니다.
import tkinter
win = tkinter.Tk();
win.title('GUI Program');
win.geometry('300x300+50+50');
label1 = tkinter.Label(win, text='label1 top-1', relief='solid');
label1.pack(side='top');
label2 = tkinter.Label(win, text='label2 top-2', relief='solid');
label2.pack(side='top');
label3 = tkinter.Label(win, text='label3 left-1', relief='solid');
label3.pack(side='left');
label4 = tkinter.Label(win, text='label4 right-1', relief='solid');
label4.pack(side='right');
label5 = tkinter.Label(win, text='label5 bottom-1', relief='solid');
label5.pack(side='bottom');
win.mainloop();
위 코드를 실행해보시면 side별로 순차적으로 Label이 배치되어 출력되는 것을 확인할 수 있습니다.
pack()의 옵션들
이름 | 기능 | 기본값 | 속성 |
side | 특정위치로 위젯 공간할당 | top | top, bottom, left, right |
fill | 할당된 공간에 크기 맞춤 ( X : 가로영역 끝까지, Y : 세로영역 끝까지 ... ) |
none | none, x, y, both |
expand | 미사용 공간 확보 | False | Boolean |
anchor | 할당된 공간내 위젯 위치지정 | center | center, n, ne, nw, s, se, sw, e, w |
padx | 위젯에 대한 가로 외부여백 ( margin ) | 0 | 숫자 |
pady | 위젯에 대한 세로 외부여백 ( margin ) | 0 | 숫자 |
ipadx | 위젯에 대한 가로 내부여백 ( padding ) | 0 | 숫자 |
ipady | 위젯에 대한 세로 내부여백 ( padding ) | 0 | 숫자 |
grid()
- grid() 함수는 row, column을 지정받아 셀단위로 위젯을 배치합니다.
- 먼저 선언된 grid() 부터 순차 배치됩니다.
- 한 번에 셀을 뛰어넘어 배치할 수 없습니다. ( 코드상에서 셀을 뛰어 넘겨 적어도 자동으로 다음 셀로 지정됨 )
- pack() 함수와는 같은 화면에서 같이 사용될 수 없습니다.
import tkinter
win = tkinter.Tk();
win.title('GUI Program');
win.geometry('300x300+50+50');
label1 = tkinter.Label(win, text='label1', relief='solid');
label1.grid(row=0, column=0);
label2 = tkinter.Label(win, text='label2', relief='solid');
label2.grid(row=0, column=1)
label3 = tkinter.Label(win, text='label3', relief='solid');
label3.grid(row=1, column=0)
label4 = tkinter.Label(win, text='label4', relief='solid');
label4.grid(row=1, column=1)
label5 = tkinter.Label(win, text='label5', relief='solid');
label5.grid(row=2, column=1);
label6= tkinter.Label(win, text='label6', relief='solid');
label6.grid(row=2, column=2);
win.mainloop();
위 코드를 실행하면 Grid형태로 Label이 출력되는 것을 확인할 수 있습니다.
grid의 옵션들
이름 | 기능 | 기본값 | 속성 |
row | 행 위치 | 0 | 숫자 |
column | 열 위치 | 0 | 숫자 |
rowspan | 차지할 행 공간지정 | 1 | 숫자 |
columnspan | 차지할 열 공간지정 | 1 | 숫자 |
sticky | 할당된 공간 내에서 위치설정 | n, ,nw, ne, s, sw, se, e | |
padx | 위젯에 대한 가로 외부여백 ( margin ) | 0 | 숫자 |
pady | 위젯에 대한 세로 외부여백 ( margin ) | 0 | 숫자 |
ipadx | 위젯에 대한 가로 내부여백 ( padding ) | 0 | 숫자 |
ipady | 위젯에 대한 세로 내부여백 ( padding ) | 0 | 숫자 |
place()
- place()는 좌표를 지정하여 절대 위치로 위젯을 배치합니다.
- 먼저 선언한 place()부터 순차 배치됩니다.
import tkinter
win = tkinter.Tk();
win.title('GUI Program');
win.geometry('300x300+50+50');
label1 = tkinter.Label(win, text='label1', relief='solid');
label1.place(x=200, y=200)
label2 = tkinter.Label(win, text='label2', relief='solid');
label2.place(x=50, y=50)
label3 = tkinter.Label(win, text='label3', relief='solid');
label3.place(x=100, y=100);
label4 = tkinter.Label(win, text='label4', relief='solid');
label4.place(x=123, y=123)
label5 = tkinter.Label(win, text='label5', relief='solid');
label5.place(x=100, y=20)
label6= tkinter.Label(win, text='label6', relief='solid');
label6.place(x=30, y=200)
win.mainloop();
위 예제 코드를 실행하면 설정된 좌표값으로 배치된 위젯들을 확인할 수 있습니다.
place의 옵션들
이름 | 기능 | 기본값 | 속성 |
x | x좌표 설정 | 0 | 숫자 |
y | y좌표 설정 | 0 | 숫자 |
relx | x좌표 배치 비율설정 | 0 | 0~1 |
rely | y좌표 배치 비율설정 | 0 | 0~1 |
width | 위젯 길이설정 | 0 | 숫자 |
height | 위젯 높이설정 | 0 | 숫자 |
relwidth | 위젯 길이비율 | 0 | 0~1 |
relheight | 위젯 높이비율 | 0 | 0~1 |
anchor | 위젯 기준위치 | nw | n, ne, nw, s, se, sw, e |