파이썬 tkinter 공부 중인데 질문있습니다.
조회수 1048회
윈도우 창에서 도형을 생성하고 방향키로 이동하는데 윈도우 창 크기를 넘어가 도형이 사라지는걸 방지하기 위한 코드를 작성하고 있습니다.
def move_left(event):
global x
x -= 10
if x < 0:
move_cant(event)
x += 10
else:
canvas.move(id, -10, 0)
canvas.bind_all('<KeyPress-Left>', move_left)
이렇게 작성하여 도형이 0 값 아래로 내려가면 이동이 불가 하게끔 계획하였습니다. 그러기 위해서 x y에 값을 넣고 id=canvas.create_oval(0, 0, x, y, fill="green") 작성에서 숫자가 아닌 x y로 대체 후 매 이동시 x값과 y값에 +-를 하여 0값보다 작을때 또는 윈도우 최대값보다 클 때 이동금지를 하고 싶습니다.
하지만 막상 실행시키면 윈도우 창 크기 다를때 도형 크기 다를때 오류가 나고 있네요. 원래 window_width, window_height 값을 넣고 canvas = Canvas(window, window_width, window_height) 이렇게 하고 싶었으나 잘못된 방법이라 하여 무의미하지만 window_width 따로 적고 Canvas에 width 값 따로 넣었습니다..
결론을 말씀드리면 id(도형)의 위치값 받아서 윈도우 창을 벗어나지 않게 하고 싶습니다. 도와주시면 감사하겠습니다.
from tkinter import *
window = Tk()
window_width = 700
window_height = 700
canvas = Canvas(window, width= 700, height=700)
canvas.pack()
x = 400
y = 400
id=canvas.create_oval(0, 0, x, y, fill="green")
def move_cant(event):
label = Label(window, text = "이동불가!")
label.pack()
def move_left(event):
global x
x -= 10
if x < 0:
move_cant(event)
x += 10
else:
canvas.move(id, -10, 0)
canvas.bind_all('<KeyPress-Left>', move_left)
def move_right(event):
global x
x += 10
if x > window_width:
move_cant(event)
x -= 10
else:
canvas.move(id, 10, 0)
canvas.bind_all('<KeyPress-Right>', move_right)
def move_up(event):
global y
y -= 10
if y < 0:
move_cant(event)
y += 10
else:
canvas.move(id, 0, -10)
canvas.bind_all('<KeyPress-Up>', move_up)
def move_down(event):
global y
y += 10
if y > window_height:
move_cant(event)
y -= 10
else:
canvas.move(id, 0, 10)
canvas.bind_all('<KeyPress-Down>', move_down)
mainloop()
댓글 입력