https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=285102792
[์ ์์ฑ ] ํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ๊ฒ์ ๊ฐ๋ฐ ์ค์ ํธ
ใํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ๊ฒ์ ๊ฐ๋ฐ ์ ๋ฌธํธใ์ ํํธ์ผ๋ก, ์ก์ ๊ฒ์, ์ํ ๊ฒ์, ์ ์ฌ 3D ์์ ํํ์ ํ์ฉํ 3D ์นด ๋ ์ด์ฑ ๊ฒ์ ๋ฑ ์ ํธ๋ณด๋ค ์ข ๋ ๋์ด๋๊ฐ ๋์ ๊ฒ์์ ๊ฐ๋ฐํ๋ฉด์ ํ์ด์ฌ์ ๋ค์
www.aladin.co.kr
๋๋ฆ ์ ๊ณต์ด๋ผ๊ณ ๊ธฐ๋ณธํธ ๋ง๊ณ ์ค์ ํธ์ผ๋ก ๊ณต๋ถํด๋ณด๊ฒ ๋ค๊ณ ์๋๋ฐ
ํ์ด์ฌ ๊ณผ๋ชฉ ํ์ ์ด ๋๋๋๋ํด์... (์ฌ์ง์ด ์ด๋ง์ ๋ 1๋ ์ ์ด๋ผ ๊ฐ๋ฌผ๊ฐ๋ฌผ...)
ํ๋ค๊ฐ ์ ์ดํด๊ฐ ์๋ผ์ ๋ฏธ์น๊ฒ ์ผ๋ฉด ๊ธฐ๋ณธํธ์ผ๋ก ๋ค์ ์ด ์์ ์ด๋ค...
1. ํค ์ ๋ ฅ
- ์๋์ฐ ํ์ํ๊ธฐ
- tkinter ๋ชจ๋ ์ํฌํธ : import tkinter
- Tk()๋ช ๋ น์ผ๋ก ์๋์ฐ ๊ฐ์ฒด ์์ฑ : root = tkinter.Tk()
- geometry() ๋ช ๋ น์ผ๋ก ์๋์ฐ ์ฌ์ด์ฆ ์ง์ : root.geometry("400x200")
- title() ๋ช ๋ น์ผ๋ก ์๋์ฐ ํ์ดํ ์ง์ : root.title("Hello World!")
- ๋ผ๋ฒจ ์ปดํฌ๋ํธ ์์ฑ : label = tkinter.Label(root, text="์ฑํฐ 1", font=("Times New Roman", 20))
- โ Label() ๋ช ๋ น์ผ๋ก ๋ผ๋ฒจ ์์ฑ, root๋ ๋ผ๋ฒจ์ ๋ฐฐ์นํ ์๋์ฐ, text=๋ ํ์ํ ๋ฌธ์์ด, font=๋ ๊ทธ ๋ฌธ์์ด์ ๊ธ๊ผด
- โ ์๋์ฐ์ ๋ผ๋ฒจ์ ๋ฐฐ์นํ ๋ Label()์ ์ธ์์ธ root๋ฅผ ์๋ต ๊ฐ๋ฅ
- place() ๋ช ๋ น์ผ๋ก ์ธ์ x=, y=๋ฅผ ์ฌ์ฉํด ๋ผ๋ฒจ์ ๋ฐฐ์นํ ์์น ์ง์ : label.place(x=80, y=60)
- โ ์์ (0, 0) ๊ธฐ์ค์ ์ผ์ชฝ ์ ๋ชจ์๋ฆฌ
- mainloop() ๋ช ๋ น์ผ๋ก ์๋์ฐ ํ์ : root.mainloop()
import tkinter
root = tkinter.Tk()
root.geometry("400x200")
root.title("Hello World!")
label = tkinter.Label(root, text="chapter 1", font=("Times New Roman", 20))
label.place(x=80, y=60)
root.mainloop()
- GUI : ๊ทธ๋ํผ์ปฌ ์ ์ ์ธํฐํ์ด์ค(Graphical User Interface)
์ปดํฌ๋ํธ | ๋ช ๋ น | ์ฌ์ฉ ์์ |
๋ผ๋ฒจ | Label() | label = tkinter.Label(text=๋ฌธ์์ด, font = ํฐํธ) |
๋ฒํผ | Button() | button = tkinter.Button(text=๋ฌธ์์ด) |
1ํ ํ ์คํธ ์ ๋ ฅ ํ๋ | Entry() | entry = tkinter.Entry(width = ํญ) |
๋ค์ค ํ ์คํธ ์ ๋ ฅ ํ๋ | Text() | text = tkinter.Text() |
์ฒดํฌ ๋ฒํผ (์ฒดํฌ ๋ฐ์ค) | CheckButton() | cbtn = tkinter.Checkbutton(text=๋ฌธ์์ด) |
์บ๋ฒ์ค | Canvas() | canvas = tkinter.Canvas(width = ํญ, height = ๋์ด) |
- bind() ๋ช ๋ น์ผ๋ก ํค ์ ๋ ฅ ์ํ
ํจ์ key_down(e)
ํจ์๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ๊ฐ์ ์ธ์๋ผ๊ณ ํ๋ค.
ํ์ด์ฌ์์๋ ์ธ์๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๋ ์ธ์๊ฐ ์์ ์ ๊ธฐ๋ณธ ๊ฐ์ ์ทจํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ด ์๋ค. ํจ์ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ๋ ์ธ์ด์์๋ ์ด๋ฅผ ์ฌ๋ฌ๊ฐ ์ทจํ๋ ํ์์ผ๋ก ์ง์ํ๋๋ฐ ํ์ด์ฌ์ ์กฐ๊ธ ๋ ํนํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ํ์ด์ฌ์ ์ธ์๋ฅผ ์๋ตํ ์๋ ์๊ณ , ์ธ์์ ์์๋ฅผ ๋ง์๋๋ก ๋ณ๊ฒฝํ์ฌ ์ง์ ํ ์ ์๋ค. ๋์ฑ์ด ํจ์์์ ์ด๋ค ์ธ์๋ฅผ ๋ฐ์์ง ์ด๋ฆ๊ณผ ๊ฐฏ์๋ฅผ ์ ํ์ง ์๊ณ ์๋ ํจ์๋ฅผ ์ ์ํ ์ ์๋ค.
์ถ์ฒ : https://engineer-mole.tistory.com/97
์ด๋ฐ ๊ธ์ ์ฌ์ค ๋ด๋๋ด๋ ์ดํด๊ฐ ์๊ฐ๋ค.... ๋์ ๋จธ๋ฆฌ๋ฅผ ํํ์.
- ํ์ด์ฌ์์๋ def๋ก ํจ์๋ฅผ ์ง์ ํ๋ค.
* ํจ์ ์ ์
def ํจ์๋ช :
์ฒ๋ฆฌ
- ํค ์ ๋ ฅ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ ํจ์์ด๋ฏ๋ก def key_down(e):๋ก ์์ฑํ๊ณ ์ธ์ e๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์๋ธ๋ค.
- ๋ณ์ key_c์ keycode ๊ฐ์ ๋์ ํ๊ณ label1์ ํด๋น ๊ฐ์ ํ์ํ๋ค.
- ๋ง์ฐฌ๊ฐ์ง, ๋ณ์ key_s์ keysym ๊ฐ์ ๋์ ํ๊ณ label2์ ํด๋น ๊ฐ์ ํ์ํ๋ค.
bind()๋ช ๋ น์ <KeyPress>์ด๋ฒคํธ ๋ฐ์์ ํจ์๋ฅผ ์คํํ๋ค.
- <KeyPress>๋ ๊ทธ๋ฅ ๋ง๊ทธ๋๋ก... ํค๋ฅผ ๋๋ฅธ ์ด๋ฒคํธ
๋ฐ๋ก ์ ์์ ์ ๋ฌ๋ฆฌ ์ด ์์ ์์๋ ๋ผ๋ฒจ์ ์ปดํฌ๋ํธ ์ค font ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์ด๋ฅผ ๋์ ํ๋ค.
import tkinter
def key_down(e):
key_c = e.keycode
label1["text"] = "keycode " + str(key_c)
key_s = e.keysym
label2["text"] = "keysym " + str(key_s)
root = tkinter.Tk()
root.geometry("400x200")
root.title("ํค ์
๋ ฅ")
root.bind("<KeyPress>", key_down)
fnt = ("Times New Roman", 30)
label1 = tkinter.Label(text="keycode", font = fnt)
label1.place(x = 0, y = 0)
label2 = tkinter.Label(text="keysym", font = fnt)
label2.place(x = 0, y = 80)
root.mainloop()
์ฑ ์์๋ ํค ๊ฐ์ด keycode์ keysym ์ด ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ,
keycode๋ ์๋์ฐ์ ๋งฅ์์์ ๊ฐ์ด ๋ฌ๋ผ์ keysym๊ฐ์ ๋ฐ์์ ํค ์ ๋ ฅ์ ํ์ ํ๋ค๊ณ ํ๋ค...
์ข ํต์ผํ ๊ฒ์ด์ง ๋ผ์...
์ด ์ธ์๋ bind() ๋ช ๋ น์ผ๋ก ์คํํ ์ ์๋ ์ด๋ฒคํธ๋ค
- <KeyPress> / <Key> : ํค ๋๋ฆ
- <KeyRelease> : ํค๋ฅผ ๋๋ ๋ค ๋
- <Motion> : ๋ง์ฐ์ค ํฌ์ธํฐ ์ด๋
- <ButtonPress> / <Button> : ๋ง์ฐ์ค ๋ฒํผ ํด๋ฆญ
- <ButtonRelease> : ๋ง์ฐ์ค ๋ฒํผ ํด๋ฆญ ํ ๋
2. ์ค์๊ฐ ์ฒ๋ฆฌ
import tkinter
import datetime
def time_now():
d = datetime.datetime.now()
t = "{0}:{1}:{2}".format(d.hour, d.minute, d.second)
label["text"] = t
root.after(1000, time_now)
root = tkinter.Tk()
root.geometry("400x100")
root.title("๊ฐ์ด ๊ณ์ฐ")
label = tkinter.Label(font = ("Times New Roman", 60))
label.pack()
time_now()
root.mainloop()
- ๋ ์ง์ ์๊ฐ์ ์ป์ด์ after() ๋ช ๋ น์ผ๋ก ์ค์๊ฐ ์ฒ๋ฆฌ ์ํ
import datetime
def time_now():
d = datetime.datetime.now()
t = "{0}:{1}:{2}".format(d.hour, d.minute, d.second)
label["text"] = t
root.after(1000, time_now)
# ์ค๋ต...
time_now()
์ ์์ ์์ ์ค์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๋ถ๋ถ์ด๋ค.
datetime ๋ชจ๋์ importํ๊ณ ,
datetime.now() ๋ช ๋ น์ผ๋ก ํ์ฌ ๋ ์ง์ ์๊ฐ์ ์ป์ด ๋ณ์ d์ ๋์ ํ๋ค.
5๋ฒ ํ์ d.hour๋ก ์๊ฐ, d.minute๋ก ๋ถ, d.second๋ก ์ด๋ฅผ ์ป์ด์๋๋ฐ
์๋ ฅ์ผ๋ก ๋ , ์, ์ผ์ ๊ฐ๊ฐ d.year, d.month, d.day๋ก ์ฐ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ ์ฒ๋ฆฌ ์ํ ๊ณผ์ ์ ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๋ค. (์ฝ๋๊ฐ ๊ฐ๋จํ๋๊น...)
๋จผ์ ๋งจ ๋ง์ง๋ง์ time_now() ํจ์๋ฅผ ์คํํ๋ฉด
time_now ์์ ์๋ ์ฝ๋์ค d, t, label ~์ ์ฒ๋ฆฌํ๋ฉด์ ํ์ฌ ์๊ฐ์ ์ป์ ํ, ๋ผ๋ฒจ์ ์ ๋ฐ์ดํธ ํ๋ค.
๊ทธ ๋ค์ ์ฝ๋์ธ root.after(1000, time_now)๊ฐ ์ฒ๋ฆฌ๋ ํ ๋ฐ, ์ด ๋ 1000์ ๋จ์๊ฐ ms์ด๋ฏ๋ก 1์ด๋ฅผ ๋ปํ๋ค.
๋ฐ๋ผ์ 1์ด ๋ค ๋ค์ time_now ํจ์๋ฅผ ์คํ์์ผ์ค์ผ๋ก์จ 1์ด๊ฐ ์ง๋ ๋ ๋ง๋ค ํ์ฌ ์๊ฐ์ ํ์ํด์ฃผ๊ฒ ๋๋ค.
์ด๋ฐ ์์ผ๋ก after()๋ช ๋ น์ ์ด ํจ์๋ฅผ ๊ณ์ ์คํ์์ผ์ ๊ณ์ํด์ ์๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ด๋ค.
- format() ๋ช ๋ น
t = "{0}:{1}:{2}".format(d.hour, d.minute, d.second)
format() ๋ช ๋ น์ผ๋ก ๋ฌธ์์ด์ {}๋ฅผ ์ธ์๊ฐ์ผ๋ก ์นํํ๋ค.
{} ์์๋๋ก ์ธ์๊ฐ์ ์นํํ๊ณ ์ถ์ผ๋ฉด {} ์์ ์ซ์๊ฐ์ ์๋ตํ ์ ์๋ค๋๋ฐ...
๊ทธ๋ผ ์ฌ๊ธฐ์๋ ์๋ตํ ์ ์๋ค๋๊ฑด๊ฐ?
3. ์บ๋ฆญํฐ ์ ๋๋ฉ์ด์
- ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ
tkinter ๋ชจ๋์์๋ canvas๋ผ๋ ์ปดํฌ๋ํธ์ ์ด๋ฏธ์ง๋ ๋ํ์ ๊ทธ๋ฆด ์ ์๋ค.
- Canvas() ๋ช ๋ น์ผ๋ก ์บ๋ฒ์ค ์ปดํฌ๋ํธ๋ฅผ ์์ฑ
- pack()์ผ๋ก ์บ๋ฒ์ค๋ฅผ ๋ฐฐ์น (์๋์ฐ ์์ GUI๋ฅผ ์๊ณ ๋ฐฐ์นํจ์ผ๋ก์จ ์บ๋ฒ์ค ํฌ๊ธฐ์ ๋ง์ถฐ ์๋์ฐ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ )
- tkinter.PhotoImage(file="")๋ก ์ด๋ฏธ์ง ๋ก๋ฉ (์ด ๋ file์ ์ธ์)
- create_image(x์ขํ, y์ขํ, ์ธ์ = ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ ๋ณ์)๋ก ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆผ
- โ img_bg๊ฐ ๋ณ์, image๋ ์ธ์
- โ ์ด ๋ create_image ๋ช ๋ น์ผ๋ก ์ง์ ํ ์ขํ๋ ํ๋ฉด์ ์ค์ฌ
import tkinter
root = tkinter.Tk()
root.title("Canvas์ ํ๋ฉด ๊ทธ๋ฆฌ๊ธฐ")
canvas = tkinter.Canvas(width = 480, height = 300)
canvas.pack()
img_bg = tkinter.PhotoImage(file = "park.png")
canvas.create_image(240, 150, image = img_bg)
root.mainloop()
- ๋ฐฐ๊ฒฝ ์คํฌ๋กคํ๊ธฐ
์ ์ฝ๋์์ ๋ฐฐ๊ฒฝ์ ์คํฌ๋กค ํ ํจ์๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
์ด๋ฒ์๋ after() ๋ช ๋ น์ด ์ฐ์๋๋ฐ, after() ๋ช ๋ น์ผ๋ก 50ms๋ง๋ค ๊ณ์ํด์ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋ฐฐ๊ฒฝ์ด ์คํฌ๋กค๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค.
์ฐธ๊ณ ๋ก ๋ณ์ x๋ฅผ scroll_bg() ํจ์์ ์ธ๋ถ์์ ์ ์ธํ๊ธฐ ๋๋ฌธ์,
ํจ์ ๋ด๋ถ์์๋ global x ๋ฅผ ์์ฑํ์ฌ ์ ์ญ ๋ณ์๋ก ์ ์ธํด์ผ ๋ณ์์ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค.
(x = 0์ scroll_bg ์์์ ์ ์ธํ๋ฉด after ๋ช ๋ น์ ๊ฑฐ์ณ๋ ๊ณ์ x = 0์ด๊ธฐ ๋๋ฌธ์ ์๋๋ ๊ฒ ๊ฐ๋ค. ์์์ ์ ์ธํ๊ณ ์ถ๋ค๋ฉด for๋ฌธ์ ์ด์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๊ธฐ๋...? ํ์ง๋ง ์ฌ๋ฌ๋ฒ ์๋ํด๋ดค๋๋ฐ ์๋ผ์ ์ผ๋จ ์ด ๋ฐฉ๋ฒ์ ์ตํ๋๊ธฐ๋ก... )
- tag ์ธ์
ํ์ด์ฌ์์๋ ์บ๋ฒ์ค์ ์ด๋ฏธ์ง๋ ๋ํ์ด ๊ณ์ํด์ ๋ง๊ทธ๋ ค์ง๋ฉด SW ๋์์ด ์ด์ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ทธ๋ ค์ก๋ ๊ทธ๋ฆผ์ delete() ๋ช ๋ น์ผ๋ก ์ญ์ ํ ๋ค, ์๋กญ๊ฒ ๊ทธ๋ฆฌ๊ณ , ์ญ์ ํ๊ณ , ์๋กญ๊ฒ ๊ทธ๋ฆฌ๋๋ฐ ์ด๋ ์๋ ์ฝ๋์ 9~11๋ฒ ํ์์ ์ํ๋๋ค.
create_image() ๋ช ๋ น ์ธ์์ธ tag๋ก ํ์ํ ์ด๋ฏธ์ง์ ํ๊ทธ๋ช ์ ์ ํ๊ณ , delete() ๋ช ๋ น์ ์ธ์๋ก ํด๋น ํ๊ทธ๋ฅผ ์ง์ ํด ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ค.
์ฐธ๊ณ ๋ก ํ์ฅ ๋ชจ๋์ธ Pygame์ ์ด์ฉํด ์ด๋ฌํ ๊ณผ์ ์์ด ๊ทธ๋ฅ ๋ง๊ทธ๋ฆด ์ ์๋ค๊ณ ํ๋ค.
import tkinter
x = 0 # ์คํฌ๋กค ์์น๋ฅผ ๊ด๋ฆฌํด์ค ๋ณ์ x ์ ์ธ
def scroll_bg(): # ํจ์ ์ ์
global x # ์ง์ญ๋ณ์ x๋ฅผ ์คํฌ๋กค ๋ณ์๋ก ์ทจ๊ธ
x = x + 1 # x๊ฐ์ด 1์ฉ ์ฆ๊ฐ
if x == 480 : # x๊ฐ 480์ด ๋๋ฉด
x = 0 # x์ 0์ ๋์
# ์ฆ x๋ if ๊ตฌ๋ฌธ์ ์ํด 0~479 ์ฌ์ด์ ๊ฐ์ผ๋ก ๋ฐ๋๋ฉฐ 480์ด ๋๋ฉด 0์ผ๋ก ๋์๊ฐ.
canvas.delete("BG") # ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ญ์
canvas.create_image(x - 240, 150, image = img_bg, tag = "BG") # ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ(์ผ์ชฝ)
canvas.create_image(x + 240, 150, image = img_bg, tag = "BG") # ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ(์ค๋ฅธ์ชฝ)
# ์ดํด๊ฐ ์ ์๋๋ค๋ฉด ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฐ ํ์ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํด๋ณด๋ฉด ์ดํดํ ์ ์๋ค.
root.after (50, scroll_bg)
root = tkinter.Tk()
root.title("Canvas์ ํ๋ฉด ๊ทธ๋ฆฌ๊ธฐ")
canvas = tkinter.Canvas(width = 480, height = 300)
canvas.pack()
img_bg = tkinter.PhotoImage(file = "park.png")
canvas.create_image(240, 150, image = img_bg)
scroll_bg() # scroll_bg ํจ์ ๋ถ๋ฌ์ค๊ธฐ
root.mainloop()
์ด์ ์คํฌ๋กค๋๋ ๋ฐฐ๊ฒฝ์ ๋ฐ๋ผ ์์ง์ด๋ ๊ฐ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ดค๋ค.
- ์บ๋ฆญํฐ ์ ๋๋ฉ์ด์ ๋ง๋ค๊ธฐ
import tkinter
x = 0 # ์คํฌ๋กค ์์น ๊ด๋ฆฌ ๋ณ์
ani = 0 # ๊ฐ ์ ๋๋ฉ์ด์
๋ณ์
def animation() :
global x, ani # ์ ์ญ๋ณ์ x, ani ์ ์ธ
x = x + 4
if x == 480 :
x = 0
# ๋ฐฐ๊ฒฝ ์คํฌ๋กค ์ฝ๋
canvas.delete("BG")
canvas.create_image(x-240, 150, image = img_bg, tag = "BG")
canvas.create_image(x+240, 150, image = img_bg, tag = "BG")
# ๊ฐ ์ ๋๋ฉ์ด์
์ฝ๋
ani = (ani + 1) % 4 # ani์ ๊ฐ์ 4๋ก ๋๋ ๋๋จธ์ง์ธ 0~3 ๋ฒ์์์ ๋ณ๊ฒฝ
canvas.create_image(240, 200, image = img_dog[ani], tag = "BG") # ๊ฐ ์ด๋ฏธ์ง ๊ทธ๋ฆฌ๊ธฐ
root.after(200, animation) # 200ms ํ ํจ์ ์ฌ์คํ => ์ ๋๋ฉ์ด์
์ด ๋จ
root = tkinter.Tk()
root.title("์ ๋๋ฉ์ด์
")
canvas = tkinter.Canvas(width = 480, height = 300)
canvas.pack()
img_bg = tkinter.PhotoImage(file = "park.png")
img_dog = [ # img_dog ๋ฆฌ์คํธ์ ๊ฐ ์ด๋ฏธ์ง 4์ฅ ๋ก๋ฉ
tkinter.PhotoImage(file="dog0.png"),
tkinter.PhotoImage(file="dog1.png"),
tkinter.PhotoImage(file="dog2.png"),
tkinter.PhotoImage(file="dog3.png")
]
animation()
root.mainloop()
img_dog ๋ฆฌ์คํธ์ ์ด๋ฏธ์ง๋ค์ ๋ด์ animation() ํจ์์์ ๋ถ๋ฌ์์ ์ด๋ฅผ ani๋ผ๋ ๋ณ์์ ์ง์ ํ๋๋ฐ,
์ด ๋ ani = (ani + 1) % 4 ์ ๋ฐ๋ผ after() ๋ช ๋ น์ด ์คํ๋ ๋ ๋ง๋ค ๊ฐ๊ฐ ์์ง์ด๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ด๋ค.
%๋ ๋๋์ ์ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ์ฐ์ฐ์๋ก ani = (ani + 1) % 4์ ์ฒ์ ์ ์ธ๋ ani์ ๊ฐ 0์ด ๋ค์ด๊ฐ๋ฉด
(0+1) % 4 = 1์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ after ๋ช ๋ น์ด ์คํ๋๊ณ ani์ ๊ฐ 1์ด ๋ค์ด๊ฐ๋ฉด
(1+1) % 4 = 2๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ after ๋ช ๋ น์ด ์คํ๋๊ณ ani์ ๊ฐ 2๊ฐ ๋ค์ด๊ฐ๋ฉด ๊ทธ ๋ค์์ ani ๊ฐ์ 3์ด ๋ ๊ฒ์ด๋ค. ๊ทธ ๋ค์์ ๋ค์ 0์ด ๋๊ณ , 1์ด ๋๊ณ , 2๊ฐ ๋๊ณ ... ์ต์ข ์ ์ผ๋ก ์ ๋๋ฉ์ด์ ์ด ๋ง๋ค์ด์ง๋ค.
x = x + 4
if x == 480 :
x = 0
๋ง์ฐฌ๊ฐ์ง๋ก ์ด %๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ก ์์ 3์ค์ง๋ฆฌ ์ฝ๋๋ฅผ
x = (x + 4) % 480
์ด์ ๊ฐ์ด ๋ฐ๊ฟ ์ ์๋ค.
4. 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํ ๋งต ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋ฆฌ์คํธ
- 1์ฐจ์ ๋ฆฌ์คํธ : data[n] (0 ~ n-1๊น์ง n๊ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด ๋ 0 ~ n-1๊น์ง์ ์ซ์๋ ์ธ๋ฑ์ค)
- 2์ฐจ์ ๋ฆฌ์คํธ : data[n][m]
- 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๋งต ํ์ํ๊ธฐ
import tkinter
root = tkinter.Tk()
root.title("๋งต ๋ฐ์ดํฐ")
canvas = tkinter.Canvas(width = 336, height = 240) # ์บ๋ฒ์ค ์ปดํฌ๋ํธ ์์ฑ
canvas.pack() # ์บ๋ฒ์ค ๋ฐฐ์น
img = [ # ๋ฆฌ์คํธ์ ์ด๋ฏธ์ง ๋ก๋ฉ
tkinter.PhotoImage(file="chip0.png"),
tkinter.PhotoImage(file="chip1.png"),
tkinter.PhotoImage(file="chip2.png"),
tkinter.PhotoImage(file="chip3.png")
]
map_data = [ # 2์ฐจ์ ๋ฆฌ์คํธ๋ก ๋งต ๋ฐ์ดํฐ ์ ์
[0, 1, 0, 2, 2, 2, 2],
[3, 0 ,0 ,0 ,2 ,2 ,2],
[3, 0, 0, 1, 0, 0, 0],
[3, 3, 0, 0, 0, 0, 1],
[3, 3, 3, 3, 0, 0, 0]
]
for y in range(5) # for๋ฌธ์ผ๋ก y ๊ฐ์ 0~4์์ 1์ฉ ์ฆ๊ฐ๋ฅผ ๋ฐ๋ณต
for x in range(7) : # for๋ฌธ์ผ๋ก x ๊ฐ์ 0~6์์ 1์ฉ ์ฆ๊ฐ๋ฅผ ๋ฐ๋ณต
n = map_data[y][x] # ๋ณ์ n์ ๋ฆฌ์คํธ ๊ฐ ๋์
canvas.create_image(x * 48 + 24, y * 48 + 24, image = img[n]) # ๋งต ์นฉ ๊ทธ๋ฆฌ๊ธฐ
root.mainloop() # ์๋์ฐ ํ์
map_data ๋ผ๋ 2์ฐจ์ ๋ฆฌ์คํธ์ ๋งต ๋ฐ์ดํฐ๋ฅผ ์ ์ํด ์ด๋ฅผ ์ด์ค for๋ฌธ์ ์ด์ฉํด map_data[y][x]์ ๊ฐ์ ๋ณ์ n์ ๋ฃ์ด ๊ทธ n ๊ฐ์ ๋งต์นฉ์ ํ์ํ๋ค.
์ด ๋ ์ดํด๊ฐ ์๊ฐ๋ ๋ถ๋ถ์ด ์์๋๋ฐ,
๋งต ์นฉ์ ํ์ํ๋ ์ขํ๊ฐ x * 48 + 24, y * 48 + 24์ธ๋ฐ
์ 24๊ฐ ๋ํด์ ธ์ผํ๋์ง ๋ชจ๋ฅด๊ฒ ์๋ค.
์์ ์ ์ผ์ชฝ ๋ชจ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ด ์๋์๋?
๊ฐ๋ก 48ํฝ์ , ์ธ๋ก 48ํฝ์ ์ธ๋ฐ ์ 24๋ฅผ ๋ํด์ผ๋ง ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๋ ฅ๋๋ ๊ฒ์ธ๊ฐ?
์์ ์ด ์ผ์ชฝ ๋ชจ์๋ฆฌ์๋ ๊ฒ์ ์๋์ฐ์์์ ์ขํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์๋์ฐ ์์ ์บ๋ฒ์ค๊ณ ,
์์์ create_image() ๋ช ๋ น์ผ๋ก ์ง์ ํ ์ขํ๊ฐ ํ๋ฉด์ ์ค์ฌ์ด ๋๋ค๊ณ ํ์ผ๋,
48ํฝ์ ์ ๋ฐ์ธ 24ํฝ์ ์ ์ค์ฌ์ผ๋ก ์ก์์ผ๋ง
๋งจ ์ฒ์ x, y์ 0์ด ์ ๋ ฅ๋ ๋๋
์ค์ฌ์ (24, 24)๋ก ํ์ฌ (0, 0)๋ถํฐ ์ฑ์์ ธ ์๊ฐํ๋๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
5. ๋ฐ๋ฅ๊ณผ ๋ฒฝ ํ์
- ๋ง์ฐ์ค ํฌ์ธํฐ ์ฌ์ฉ
๋ฐ๋ก ์์์ ๋ง๋ค์๋ ๋งต์ ํ ๋๋ก ๋ง์ฐ์ค ํฌ์ธํฐ์ ์์น์ ๋ฌด์์ด ์๋์ง ์ถ๋ ฅ์ ํด๋ณด๋ ํ๋ก๊ทธ๋จ์ด๋ค.
import tkinter
def mouse_click(e) : # ํจ์ ์ ์
px = e.x # px์ ๋ง์ฐ์ค ํฌ์ธํฐ x ์ขํ ๋์
py = e.y # py์ ๋ง์ฐ์ค ํฌ์ธํฐ y ์ขํ ๋์
print("๋ง์ฐ์ค ํฌ์ธํฐ ์ขํ : ({}, {})".format(px, py)) # px์ py ๊ฐ ์ถ๋ ฅ
mx = int(px / 48) # mx์ px / 48์ ์ ์ ๊ฐ ๋์
my = int(py / 48) # my์ py / 48์ ์ ์ ๊ฐ ๋์
if 0 <= mx and mx <= 6 and 0 <= my and my <= 4 : # mx์ my๊ฐ ๋ฐ์ดํฐ ๋ฒ์ ์์ด๋ฉด
n = map_data[my][mx] # n์ ๋งต ์นฉ ๋ฒํธ ๋์
print("์ฌ๊ธฐ์ ์๋ ๋งต ์นฉ์ " + CHIP_NAME[n]) # ๋งต ์นฉ ์ด๋ฆ ์ถ๋ ฅ
root = tkinter.Tk()
root.title("๋งต ๋ฐ์ดํฐ")
canvas = tkinter.Canvas(width = 336, height = 240)
canvas.pack()
canvas.bind("<Button>", mouse_click) # ๋ง์ฐ์ค๋ก ์บ๋ฒ์ค ํด๋ฆญ ์ ์คํํ ํจ์ ์ง์
CHIP_NAME = ["ํ", "๊ฝ", "์ฒ", "๋ฐ๋ค"] # ๋งต ์นฉ ์ด๋ฆ์ ๋ฆฌ์คํธ๋ก ์ ์
img = [
tkinter.PhotoImage(file="chip0.png"),
tkinter.PhotoImage(file="chip1.png"),
tkinter.PhotoImage(file="chip2.png"),
tkinter.PhotoImage(file="chip3.png")
]
map_data = [
[0, 1, 0, 2, 2, 2, 2],
[3, 0 ,0 ,0 ,2 ,2 ,2],
[3, 0, 0, 1, 0, 0, 0],
[3, 3, 0, 0, 0, 0, 1],
[3, 3, 3, 3, 0, 0, 0]
]
for y in range(5) :
for x in range(7) :
n = map_data[y][x]
canvas.create_image(x * 48 + 24, y * 48 + 24, image = img[map_data[y][x]])
root.mainloop()
px = e.x, py = e.y๋ก ํฌ์ธํฐ์ (x, y)์ขํ๋ฅผ ์ป๊ณ ์ด๋ฅผ 48๋ก ๋๋๋ ์ด์ ๋ 48๋ก ๋๋ ์ผ map_data์ ์๋ ๋งต ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค ๊ฐ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
mx์ my๋ฅผ int() ๋ช ๋ น์ผ๋ก ์์์ ์ดํ๋ฅผ ๋ฒ๋ ค์ฃผ๋ ์ด์ ๋
๋ด๊ฐ ํด๋ฆญํ ์์น๊ฐ 48๋ก ๋ฑ ๋๋ ๋จ์ด์ง์ง ์๋ (74, 100)์ธ ๊ฒฝ์ฐ ์์์ ์ด ๋์ค๊ณ ,
๊ทธ๋ฐ ์ธ๋ฑ์ค๋ ์ ํ ์๊ธฐ ๋๋ฌธ์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ค ๋ถ๋ถ์ ๋ชป๋ค์ด๊ฐ๊ฒ ์ด๋์ ์ ํํ๊ณ ,
ํ, ์ฒ, ๊ฝ์ ๋ฐ๋ฅ์ผ๋ก ์ทจ๊ธํด ํ๋ ์ด์ด ์บ๋ฆญํฐ๊ฐ ๊ทธ ๊ณณ์ ๊ฑธ์ด๋ค๋๊ฒ ํ ์ ์๋ค.
'python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ์ผ๋ก ๋ฐฐ์ฐ๋ ๊ฒ์ ๊ฐ๋ฐ ์ค์ ํธ chapter 2 (0) | 2022.02.02 |
---|