tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기
본문 바로가기
파이썬(Python)/파이썬 GUI(PyQt5 & tkinter)

tkinter - 그리드를 이용해서 레이블, 엔트리, 버튼 배치하기

by Squat Lee 2021. 10. 8.

 

지난 포스트에서 레이블, 엔트리, 버튼을 만드는 방법을 설명하였습니다. 지난 포스트는 아래 링크를 참고하시기 바랍니다.

tkinter - 레이블, 엔트리, 버튼 만들기

 

이번 포스트는 Label, Entry, Button을 배치하는 방법을 다뤄 보도록 하겠습니다.

 

from tkinter import *

 

win = Tk()

win.title('password')

win.geometry('250x100')

 

win.mainloop()

 

위와 같이 코드를 입력하여 창을 만들어 줍니다.

 

이렇게 창이 만들어 집니다. 보시면 아시겠지만, 비밀번호를 입력하는 창을 tkinter를 사용하여 만들려고 합니다.

 

우선 레이블 부터 배치 하도록 하겠습니다.

 

lbl_name = Label(win, text='User Name')

lbl_pw = Label(win, text='Password')

lbl_name.grid(row=0, column=0, sticky=W)#레이블에서 텍스트 위치를 왼쪽으로 정렬, 오른쪽이면 'E'

lbl_pw.grid(row=1, column=0, sticky=W)

 

레이블은 이름을 적는란과 Password를 적는 란을 표시하였습니다.

 

'grid'라는 속성을 사용해서 행과 열을 지정해줍니다. (row=0, column=0) 이면, UI 창에서 맨 왼쪽 위에 표시가 됩니다.

 

'sticky=W' 라는 옵션은 레이블에서 텍스트 위치를 왼쪽(West)로 붙여라는 얘기 입니다. 오른쪽으로 붙이고자 하면 'sticky=E' 라고 옵션을 사용하면 됩니다.

 

 

ent_name = Entry(win)

ent_pw = Entry(win)

ent_name.grid(row=0, column=1)

ent_pw.grid(row=1, column=1)

 

'Entry'는 글자를 입력할 수 있는 항목입니다. 

 

Entry도 'grid'속성을 사용해서 각각 배치합니다.

 

어설프지만 그나마 제대로 된 모양이 나온 것 같습니다.

 

lbl_btn = Label(win)

lbl_btn.grid(row=2, column=0, columnspan=2#컬럼 2개를 병합

btn_ok = Button(lbl_btn, text='OK')

btn_cancel = Button(lbl_btn, text='Cancel')

btn_ok.grid(row=0, column=0, padx = 10)#x축 방향으로 외부여백을 10으로 설정

btn_cancel.grid(row=0, column=1, padx = 10)

 

마지막으로 레이블과 버튼을 배치해 보겠습니다.

 

'grid' 속성에서 'columnspan=2'라는 옵션을 적으면 컬럼 2개가 병합됩니다.

 

그리고 'grid' 속성에서 'padx = 10' 옵션을 사용하면 x축 방향으로 외부 여백이 10으로 설정됩니다. 이 옵션을 사용하지 않으면, 'ok' 버튼과 'cancel' 버튼이 붙어서 표시 됩니다.

 

위의 그림과 같이 잘 만들어진 것을 확인할 수 있습니다.

 

전체 코드는 아래와 같으니 참고하시기 바랍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from tkinter import *
 
win = Tk()
win.title('password')
win.geometry('250x100')
 
lbl_name = Label(win, text='User Name')
lbl_pw = Label(win, text='Password')
lbl_name.grid(row=0, column=0, sticky=W)
lbl_pw.grid(row=1, column=0, sticky=W)
 
ent_name = Entry(win)
ent_pw = Entry(win)
ent_name.grid(row=0, column=1)
ent_pw.grid(row=1, column=1)
 
lbl_btn = Label(win)
lbl_btn.grid(row=2, column=0, columnspan=2)
btn_ok = Button(lbl_btn, text='OK')
btn_cancel = Button(lbl_btn, text='Cancel')
btn_ok.grid(row=0, column=0, padx = 10)
btn_cancel.grid(row=0, column=1, padx = 10)
 
win.mainloop()
cs
728x90
반응형

댓글