首页 > 解决方案 > Python Turtle,更改可见部分

问题描述

在画布上,我画了两个点,右一个在(100,0),左一个在(-1000,0)。初始化程序后,原始屏幕位置(可见部分)在右点附近,就像 pic1 show

图 1:[1]:https ://i.stack.imgur.com/KtPRN.png

现在我想使用坐标将屏幕(可见部分)移动到左点,以便我可以看到它(pic2)。我该怎么办?

图二:https ://i.stack.imgur.com/Rtfrv.png


def drawDot(x):
    penup()
    goto(x, 0)
    pendown()
    dot('pink')
    write(x)


b = -1000 #left dot(-1000,0)

a = 100   #right dot(100,0)

speed(0)
delay(0)
tracer(0, 0)
hideturtle()
screensize(500,500)

color('red')
bgcolor('black')

drawDot(a)
drawDot(b)
done()

标签: pythonturtle-graphics

解决方案


我相信以下内容符合您的描述。当窗口打开时,它居中(0, 0),点a在右侧可见,点b根本不可见。当您单击窗口时,它会滚动以使窗口以点为中心b

from turtle import Screen, Turtle

WINDOW_WIDTH, WINDOW_HEIGHT = 500, 500
CANVAS_WIDTH, CANVAS_HEIGHT = 3000, 1000

def drawDot(x):
    turtle.penup()
    turtle.setx(x)
    turtle.dot('pink')
    turtle.write(x)

def scrollToDot(x, y):  # unused arguments
    canvas = screen.getcanvas()
    # tkinter has a different coordinate system
    # we have to describe left edge of scrolled
    # window as percentage in its coordinates:
    screen_center = CANVAS_WIDTH / 2
    dot_center = screen_center + b
    left_edge = dot_center - screen.window_width() / 2
    canvas.xview_moveto(left_edge / CANVAS_WIDTH)  # percentage

a = 100  # right dot(100, 0)
b = -1000 # left dot(-1000, 0)

screen = Screen()
screen.setup(WINDOW_WIDTH, WINDOW_HEIGHT)  # What we see
screen.screensize(CANVAS_WIDTH, CANVAS_HEIGHT)  # What there is
screen.bgcolor('black')

turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.color('red')

drawDot(a)
drawDot(b)

screen.onclick(scrollToDot)
screen.mainloop()

为此,我们必须访问Canvasturtle 的tkinter 基础。但是,Canvas坐标系与海龟的不同,因此我们必须按照代码注释中的说明进行调整。


推荐阅读