본문 바로가기

[Python] tkinter grid 레이아웃 사용하기

by rudals.kim 2021. 5. 29. 댓글 개
반응형

Python에서 윈도우에 widget을 배치하는 방법으로 grid 레이아웃이 사용됩니다. 

사용방법도 간단히 배치하고 싶은 widget을 행과 열을 지정하는 방법으로 쉽게 배치시킬 수 있습니다.

 

우선 간단히 윈도우에 버튼 4개를 grid 레이아웃을 사용하여 배치하는 예제를 구현해 보았습니다.

2행 2열의 grid 위에 배치를 하였습니다.

 

import tkinter as tk

root = tk.Tk()
root.title("레이아웃 테스트")

frame = tk.Frame(root)
frame.pack()

button0_0 = tk.Button(frame, text = "버튼0-0", width=20, bg="#00ffff")
button0_0.grid(row = 0, column = 0)

button0_1 = tk.Button(frame, text = "버튼0-1", width=20, bg="#ffc000")
button0_1.grid(row = 0, column = 1)

button1_0 = tk.Button(frame, text = "버튼1-0", width=20, bg="#ff9999")
button1_0.grid(row = 1, column = 0)

button1_1 = tk.Button(frame, text = "버튼1-1", width=20, bg="#99ff99")
button1_1.grid(row = 1, column = 1)

root.mainloop()

 

실행을 해 보면 아래와 같이 2행 2열로 버튼이 배치됩니다.

마지막 버튼 button을 row=2, coloumn=0로 변경해 보면 아래와 같이 3행 2열의 배치로 변경할 수 있습니다.

 

button2_0 = tk.Button(frame, text = "버튼2-0", width=20)
button2_0.grid(row = 2, column = 0)

 

grid 레이아웃을 사용할 경우 행/열의 방식을 사용하기 때문에 지정된 좌표에 widget이 배치됩니다.

그러나 widget을 배치하다 보면 여러 개의 행 또는 열에 widget을 배치하고 싶은 경우가 발생됩니다.

이 경우에는 rowspan/columnspan 파라미터를 사용하여 배치시킬 수 있습니다.

동작 방식은 사용하고자 하는 행/열을 하나로 묶어서 widget을 배치하는 방식을 사용합니다.

예를 들어 N개의 행 또는 열을 사용하고 싶은 경우 rowspan=N 또는 columnspan=N을 사용하여 N개의 행/열을 점유할 수 있습니다.

아래 예제를 참고하시면 보다 쉽게 이해가 될 것 같습니다.

 

import tkinter as tk

root = tk.Tk()
root.title("레이아웃 테스트")

frame = tk.Frame(root)
frame.pack()

button0_0 = tk.Button(frame, text = "버튼0-0", width=20, bg="#00ffff")
button0_0.grid(row = 0, column = 0)

button0_1 = tk.Button(frame, text = "버튼0-1", width=20, bg="#ffc000")
button0_1.grid(row = 0, column = 1, rowspan = 2)

button1_0 = tk.Button(frame, text = "버튼1-0", width=20, bg="#ff9999")
button1_0.grid(row = 1, column = 0)

button2_0 = tk.Button(frame, text = "버튼2-0", width=20, bg="#99ff99")
button2_0.grid(row = 2, column = 0, columnspan = 2)

root.mainloop()

 

실행시켜보면 아래와 같이 버튼 0-1/버튼 2-0이 2개의 행/열을 점유하여 배치가 되고 있습니다.

배치된 widget이 가운데 배치가 되는데 만약에 점유한 행/열을 가득 채워진 형태로 배치하고 싶은 경우 sticky 파라미터를 사용하면 됩니다. 동서남북 형태로 widget을 늘릴 수 있습니다.

아래 예제를 참고하시기 바랍니다.

 

import tkinter as tk

root = tk.Tk()
root.title("레이아웃 테스트")

frame = tk.Frame(root)
frame.pack()

button0_0 = tk.Button(frame, text = "버튼0-0", width=20, bg="#00ffff")
button0_0.grid(row = 0, column = 0)

button0_1 = tk.Button(frame, text = "버튼0-1", width=20, bg="#ffc000")
button0_1.grid(row = 0, column = 1, rowspan = 2, sticky=tk.W+tk.E+tk.N+tk.S)

button1_0 = tk.Button(frame, text = "버튼1-0", width=20, bg="#ff9999")
button1_0.grid(row = 1, column = 0)

button2_0 = tk.Button(frame, text = "버튼2-0", width=20, bg="#99ff99")
button2_0.grid(row = 2, column = 0, columnspan = 2, sticky=tk.W+tk.E+tk.N+tk.S)

root.mainloop()

 

실행시키면 아래와 같이 widget의 동서남북 면을 붙여(?) 또는 늘려(?) 가득 채워진 형태로 만들어 줍니다.

grid 레이아웃을 사용하여 원하는 대로 widget을 배치하여 좀 더 보기 좋은 GUI를 구현할 수 있을 것 같습니다.

반응형

댓글