Ниже приведен пример манипулирования прокруткой на уровне tkinter для получения желаемого поведения. В этом случае я держу черепаху в центре экрана, но с помощью клавиш со стрелками перемещаю пейзаж под ней.
Код между ### Generate a landscape ...
и ### Finished generating a ...
взят из SO-вопроса, на который я ответил ранее, и предназначен для изучения интересного фрактального ландшафта:
from turtle import Turtle, Screen
from random import random
MAGNIFICATION = 10
def move_left():
canvas.xview_scroll(-1, "units")
turtle.setx(turtle.xcor() - MAGNIFICATION)
def move_right():
canvas.xview_scroll(1, "units")
turtle.setx(turtle.xcor() + MAGNIFICATION)
def move_up():
canvas.yview_scroll(-1, "units")
turtle.sety(turtle.ycor() + MAGNIFICATION)
def move_down():
canvas.yview_scroll(1, "units")
turtle.sety(turtle.ycor() - MAGNIFICATION)
screen = Screen()
width, height = screen.screensize()
screen.screensize(width * MAGNIFICATION, height * MAGNIFICATION)
canvas = screen.getcanvas()
canvas.config(xscrollincrement=str(MAGNIFICATION))
canvas.config(yscrollincrement=str(MAGNIFICATION))
# turtle initialization
turtle = Turtle("turtle", visible=False)
turtle.width(MAGNIFICATION)
turtle.resizemode('auto')
### Generate a landscape to explore
screen.tracer(False)
RULES = {'x':'x+yf+', 'y':'-fx-y', 'f':'f', '+':'+', '-':'-'}
sub_string = string = "fx"
LEVEL = 13
for _ in range(LEVEL):
turtle.pencolor(random(), random(), random())
for character in sub_string:
if character == '+':
turtle.right(90)
elif character == '-':
turtle.left(90)
elif character == 'f':
turtle.forward(5 * MAGNIFICATION)
screen.update()
full_string = "".join(RULES[character] for character in string)
sub_string = full_string[len(string):]
string = full_string
screen.tracer(True)
### Finished generating a landscape to explore
turtle.penup()
turtle.home()
turtle.setheading(90)
turtle.color('dark green', 'light green')
turtle.showturtle()
screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")
screen.onkey(move_up, "Up")
screen.onkey(move_down, "Down")
screen.listen()
screen.mainloop()
Полосы прокрутки отражают движение по всему пространству. К сожалению, полосы прокрутки по-прежнему активны и будут перебрасывать вещи (используйте вместо них клавиши со стрелками), и нужно работать около краев ландшафта, но это просто пример, чтобы показать, что почти все возможно, если вы потратите время на исследуйте основы Tkinter / Tk.
![enter image description here](https://i.stack.imgur.com/TCKOg.png)