1. Чтобы заставить персонажа останавливаться при достижении линии, нужно проверять текущее положение персонажа по координате, и если он достигает определенной точки (линии), изменять флаг движения персонажа на False, чтобы он остановился. Например:
```python
line_position = 300 # координата линии
if character_position >= line_position:
character_moving = False
# где character_position - текущая координата персонажа
# character_moving - переменная, отвечающая за движение персонажа
```
2. Чтобы изменить направление движения прямоугольника на канвасе с помощью клавиш клавиатуры в библиотеке tkinter, нужно создать функцию, которая будет обрабатывать нажатия клавиш и изменять координаты прямоугольника в соответствии с направлением. Например:
```python
def move(event):
global rect_x, rect_y
key = event.keysym
if key == "Up":
rect_y -= 10
elif key == "Down":
rect_y += 10
elif key == "Left":
rect_x -= 10
elif key == "Right":
rect_x += 10
canvas.coords(rectangle, rect_x, rect_y, rect_x + rect_width, rect_y + rect_height)
canvas.bind("<Key>", move)
```
В этом примере rect_x и rect_y - текущие координаты прямоугольника, а move(event) - функция, которая обрабатывает нажатия клавиш и изменяет координаты прямоугольника на канвасе.