CodeGym /์ž๋ฐ” ์ฝ”์Šค /Python SELF KO /์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ ๋ฐฐ์น˜์˜ ๊ธฐ์ดˆ (grid, pack)

์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ ๋ฐฐ์น˜์˜ ๊ธฐ์ดˆ (grid, pack)

Python SELF KO
๋ ˆ๋ฒจ 50 , ๋ ˆ์Šจ 0
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1. Tkinter์—์„œ์˜ ์š”์†Œ ๋ฐฐ์น˜ ๋ฐฉ๋ฒ•

๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹จ์ˆœํžˆ ํ™”๋ฉด์— ํฉ์–ด์ง„ ๋ฒ„ํŠผ๊ณผ ํ…์ŠคํŠธ ํ•„๋“œ๋งŒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•„๋งˆ ์ด๋ฏธ ๋ˆˆ์น˜์ฑ˜์„ ๊ฑฐ์•ผ. ์ž˜ ๊ตฌ์กฐํ™”๋˜๊ณ , ๊ฐ๊ฐ์˜ ๋””ํ…Œ์ผ์ด ์ œ์ž๋ฆฌ์— ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•˜์ง€. Tkinter๋Š” pack, grid, place๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฐ์น˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด. ์˜ค๋Š˜์€ pack๊ณผ grid์— ์ง‘์ค‘ํ•˜๊ณ , place๋Š” ๋” ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์š”์†Œ๋ฅผ ์ ˆ๋Œ€์ ์ธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•ด์•ผ ํ•  ๋•Œ๋กœ ๋‚จ๊ฒจ๋‘์ž.

pack์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

pack ๋ฉ”์„œ๋“œ๋Š” ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์ด์•ผ. "๋จผ์ € ์˜จ ๋†ˆ์ด ๋จผ์ € ๋ฐฐ์น˜๋œ๋‹ค" ์›์น™์œผ๋กœ ์š”์†Œ๋ฅผ ์ปดํŒฉํŠธํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์กฐ์งํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค˜. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ๋‹จ์ˆœํ•ด์„œ ๋ชจ๋“  ์š”์†Œ์˜ ์ •ํ™•ํ•œ ๋ฐฐ์น˜๋ฅผ ์™„๋ฒฝํžˆ ์ œ์–ดํ•˜๊ธด ์–ด๋ ค์›Œ.

pack ์‚ฌ์šฉ ์˜ˆ์ œ


import tkinter as tk

root = tk.Tk()
root.title("pack ๋ฐฐ์น˜ ์˜ˆ์ œ")

# ๋ช‡ ๊ฐ€์ง€ ์œ„์ ฏ ์ƒ์„ฑ
label = tk.Label(root, text="๋‚˜๋Š” ๋ ˆ์ด๋ธ”")
button = tk.Button(root, text="๋‚˜๋Š” ๋ฒ„ํŠผ")

# pack์„ ์‚ฌ์šฉํ•ด ์œ„์ ฏ ๋ฐฐ์น˜
label.pack()
button.pack()

root.mainloop()

์ด ์˜ˆ์ œ์—์„œ label๊ณผ button์€ ๋งˆ์น˜ ์ปคํ”ผ์ˆ ์นœ๊ตฌ๋“ค์ฒ˜๋Ÿผ ๋‚˜๋ž€ํžˆ ์ค„์„ ์„œ๋“ฏ ๋ฐฐ์น˜๋์–ด. Starbucks ์ค„์„ ์ƒ๊ฐํ•ด๋ด!

grid์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ

๋งŒ์•ฝ pack์ด ์ฆ๊ฑฐ์šด ์ถ•์ œ๋ผ๋ฉด grid๋Š” ๋ชจ๋“  ์ฑ…(=์œ„์ ฏ)์ด ์ •ํ™•ํžˆ ์„œ ์žˆ๋Š” ๋„์„œ๊ด€์ด์•ผ. grid ๋ฉ”์„œ๋“œ๋Š” ์š”์†Œ๋ฅผ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ณ , ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด. ๋„ˆ๊ฐ€ ์ง์ ‘ ์–ด๋–ค ์š”์†Œ๋“ค์ด ์„œ๋กœ ๊ฐ€๊นŒ์ด ์œ„์น˜ํ• ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์ง€.

grid ์‚ฌ์šฉ ์˜ˆ์ œ


import tkinter as tk

root = tk.Tk()
root.title("grid ๋ฐฐ์น˜ ์˜ˆ์ œ")

# ๋ฒ„ํŠผ ์ƒ์„ฑ
buttons = [
    "1", "2", "3",
    "4", "5", "6",
    "7", "8", "9",
    "0", "+", "="
]

# ๋ฒ„ํŠผ์„ grid์— ์ถ”๊ฐ€
row_val = 0
col_val = 0

for button in buttons:
    btn = tk.Button(root, text=button, width=5)
    btn.grid(row=row_val, column=col_val)
    col_val += 1
    if col_val > 2:
        col_val = 0
        row_val += 1

root.mainloop()

์ด ์˜ˆ์ œ์—์„œ grid ๋ฒ„ํŠผ๋“ค์€ ์•„์นจ ์กฐํšŒ์ฒ˜๋Ÿผ ์ •๋ ฌ๋ผ ์žˆ์–ด, ๊น”๋”ํ•˜๊ณ  ์ „๋ฌธ์ ์ธ ๋Š๋‚Œ์„ ์ฃผ์ง€.

2. pack์„ ์‚ฌ์šฉํ•œ ๋ฐฐ์น˜

pack ๋ฉ”์„œ๋“œ๋Š” ์š”์†Œ๋“ค์ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋ ์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•ด. side, fill, expand, padx/pady ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์›ํ•ด.

pack ์„ค์ •

  • side: ์š”์†Œ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ์–ด๋Š ์ชฝ์— ๋ฐฐ์น˜๋ ์ง€ ๊ฒฐ์ •ํ•ด์ค˜. TOP, BOTTOM, LEFT, RIGHT ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒ ๊ฐ€๋Šฅ.
  • fill: ์š”์†Œ๊ฐ€ ์ถ•์— ๋”ฐ๋ผ ๋‚จ์€ ๊ณต๊ฐ„์„ ์ฑ„์šธ์ง€ ๊ฒฐ์ •. ์˜ˆ๋ฅผ ๋“ค์–ด X๋Š” ๊ฐ€๋กœ ๋ฐฉํ–ฅ, Y๋Š” ์„ธ๋กœ ๋ฐฉํ–ฅ์„ ์ฑ„์›Œ.
  • expand: ์—ฌ์œ  ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ• ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  • padx/pady: ์ˆ˜ํ‰๊ณผ ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ์—ฌ๋ฐฑ์„ ์„ค์ •ํ•ด์คŒ.

pack์˜ ํ™•์žฅ๋œ ์‚ฌ์šฉ ์˜ˆ์ œ


import tkinter as tk

root = tk.Tk()
root.title("pack ํ™•์žฅ ์˜ˆ์ œ")

tk.Label(root, text="๋งจ ์œ„").pack(side=tk.TOP, fill=tk.X)
tk.Label(root, text="๋งจ ์•„๋ž˜").pack(side=tk.BOTTOM, fill=tk.X)
tk.Label(root, text="์™ผ์ชฝ").pack(side=tk.LEFT, fill=tk.Y)
tk.Label(root, text="์˜ค๋ฅธ์ชฝ").pack(side=tk.RIGHT, fill=tk.Y)

root.mainloop()

3. grid๋ฅผ ์‚ฌ์šฉํ•œ ๊ทธ๋ฆฌ๋“œ ๋ฐฐ์น˜

grid ๋ฉ”์„œ๋“œ๋Š” ๋” ๋ณต์žกํ•˜๊ณ  ๊ทธ๋ฆฌ๋“œ์™€ ์…€์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ต์ˆ™ํ•ด์ง€๋ฉด ์–ด๋–ค ๋ณต์žกํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด.

grid ์„ค์ •

  • row / column: ์š”์†Œ๊ฐ€ ์–ด๋–ค ํ–‰๊ณผ ์—ด์— ๋ฐฐ์น˜๋ ์ง€ ๊ฒฐ์ •.
  • rowspan / columnspan: ์š”์†Œ๊ฐ€ ๋ช‡ ํ–‰์ด๋‚˜ ๋ช‡ ์—ด์„ ์ฐจ์ง€ํ• ์ง€ ๊ฒฐ์ •.
  • sticky: ์š”์†Œ๊ฐ€ ์…€์˜ ๊ฒฝ๊ณ„๋ฅผ ๋”ฐ๋ผ ์–ด๋””์— "๊ณ ์ •"๋ ์ง€ ๊ฒฐ์ •. N, E, S, W ๋˜๋Š” ๊ทธ ์กฐํ•ฉ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

grid์˜ ํ™•์žฅ๋œ ์‚ฌ์šฉ ์˜ˆ์ œ


import tkinter as tk

root = tk.Tk()
root.title("grid ํ™•์žฅ ์˜ˆ์ œ")

# ๋ ˆ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๊ทธ๋ฆฌ๋“œ์— ๋ฐฐ์น˜
tk.Label(root, text="ํ–‰ 0, ์—ด 0").grid(row=0, column=0, sticky="W")
tk.Label(root, text="ํ–‰ 0, ์—ด 1").grid(row=0, column=1, sticky="E")
tk.Label(root, text="ํ–‰ 1, ์—ด 0").grid(row=1, column=0, columnspan=2)

root.mainloop()

4. ์‹ค์šฉ์ ์ธ ํ™œ์šฉ๊ณผ ์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜

ํ•˜๋‚˜์˜ ๋ฐฐ์น˜ ๋ฉ”์„œ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์ข…์ข… ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ์กฐํ•ฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„. ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜๋Š” mainloop ํ˜ธ์ถœ์„ ์žŠ๊ฑฐ๋‚˜, ํ–‰/์—ด ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์„ค์ •ํ•˜๊ฑฐ๋‚˜, expand์™€ fill์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์•ผ. ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ํ•ญ์ƒ pack์ด๋‚˜ grid ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ ๊ฒ€ํ•ด.

pack๊ณผ grid๋Š” ์œ ์—ฐ์„ฑ๊ณผ ์š”์†Œ ๋ฐฐ์น˜ ์ œ์–ด์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์–ด. pack์€ ๋‹จ์ˆœํ•œ ์ˆ˜์ง ๋˜๋Š” ์ˆ˜ํ‰ ์ธํ„ฐํŽ˜์ด์Šค์— ์ ํ•ฉํ•˜๊ณ , grid๋Š” ์š”์†Œ์˜ ์ •ํ™•ํ•œ ์œ„์น˜๊ฐ€ ์ค‘์š”ํ•œ ๋ณต์žกํ•œ ๋ ˆ์ด์•„์›ƒ์— ์ ํ•ฉํ•ด.

์ด์ œ ๋ฐฐ์น˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋„ค ์ž์‹ ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐœ๋ฐœํ•  ์ค€๋น„๊ฐ€ ๋์–ด. ์œ„์ ฏ์„ ํ™”๋ฉด์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์€ ํŒŒํ‹ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ด. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํŽธ์•ˆํ•˜๊ฒŒ ๋Š๊ปด์•ผ ํ•ด. ์–ด๋–ค ์‚ฌ๋žŒ์€ ๋ฒฝ ์ชฝ์— ์žˆ๊ณ  ์‹ถ์„ ๊ฑฐ๊ณ , ์–ด๋–ค ์‚ฌ๋žŒ์€ ๋ฐฉ ๊ฐ€์šด๋ฐ๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ๊ณ  ์‹ถ๊ฒ ์ง€๋งŒ, ๋ชจ๋‘๊ฐ€ ์ž๊ธฐ ์ž๋ฆฌ์— ์žˆ๋Š” ๋Š๋‚Œ์„ ๋ฐ›์•„์•ผ ํ•ด. ์—ด์‹ฌํžˆ ์ž‘์—…์— ๋ชฐ๋‘ํ•ด์„œ ๋ฉ‹์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ด!

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION