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를 구현할 수 있을 것 같습니다.
'Software > Python' 카테고리의 다른 글
[Python] Fatal error in launcher: Unable to create process using (0) | 2021.10.24 |
---|---|
[Python] whl 확장자 파일 설치하기 (0) | 2021.01.14 |
[Python] tkinter Canvas/Treeview(Table) 사용하기 (4) | 2021.01.13 |
[Python] tkinter 스케일/리스트박스/스크롤바 사용하기 (0) | 2021.01.13 |
[Python] tkinter 파일 오픈 다이알로그/메뉴/탭 사용하기 (0) | 2021.01.12 |
댓글