Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать чтобы картинка не выходила за рамки

Артемий Сурков Ученик (128), на голосовании 1 год назад
from tkinter import *

root = Tk()
c = Canvas(width=300, height=300, bg='white')
c.focus_set()
c.pack()
img = PhotoImage(file = 'Ben.png')
a = c.create_image(10,10, anchor = NW, image = img)
c.bind('<Up>', lambda event: c.move(a, 0, -5))
c.bind('<Down>', lambda event: c.move(a, 0, 5))
c.bind('<Left>', lambda event: c.move(a, -5, 0))
c.bind('<Right>', lambda event: c.move(a, 5, 0))

root.mainloop()
Голосование за лучший ответ
кто то Мастер (1239) 1 год назад
Чтобы изображение не выходило за рамки, необходимо добавить проверку на нахождение координат изображения в пределах созданного холста (максимальных и минимальных).

То есть перед тем как выполнить движение, мы должны проверить не выйдет ли изображение за рамки холста после этого движения. Если выходит, то движение не выполняется.

Вот модифицированный вариант вашего кода, который учитывает этот момент:

```Python
from tkinter import *

root = Tk()
c = Canvas(width=300, height=300, bg='white')
c.focus_set()
c.pack()
img = PhotoImage(file = 'Ben.png')
a = c.create_image(10,10, anchor = NW, image = img)

def move_img(event, dx, dy):
x, y, _, _ = c.coords(a)
if 0 <= x + dx <= 300 - img.width() and 0 <= y + dy <= 300 - img.height():
c.move(a, dx, dy)

c.bind('<Up>', lambda event: move_img(event, 0, -5))
c.bind('<Down>', lambda event: move_img(event, 0, 5))
c.bind('<Left>', lambda event: move_img(event, -5, 0))
c.bind('<Right>', lambda event: move_img(event, 5, 0))

root.mainloop()
```

Здесь я создал функцию `move_img`, которая принимает событие, сдвиг по x (`dx`), и сдвиг по y (`dy`), проверяет, не выйдет ли изображение за границы холста после сдвига, и, если все в порядке, выполняет сдвиг. Размеры изображения используются для того, чтобы обеспечить, что изображение не будет выходить за рамки холста.

Изменения требуют уточнения расположения файла 'Ben.png'.
Похожие вопросы