Python乌龟,改变可见部分
Python Turtle, change visible part
在canvas上画了两个点,右边一个在(100,0)
,左边一个在(-1000,0)
。初始化程序后,原来的屏幕位置(可见部分) 在右边的点附近,就像 pic1 show
图片 1:[1]: https://i.stack.imgur.com/KtPRN.png
现在我想使用坐标 将屏幕(可见部分)移动到左点 以便我可以看到它(图 2)。我应该怎么做?
图2: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()
我相信以下内容符合您的描述。当 window 打开时,它以 (0, 0)
为中心,点 a
在右侧可见,点 b
根本不可见。当您单击 window 时,它会滚动以使 window 以点 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()
为此,我们必须访问 turtle 的 tkinter Canvas
基础。但是,Canvas
坐标系与 turtle 的坐标系不同,因此我们必须按照代码注释中的说明进行调整。
在canvas上画了两个点,右边一个在(100,0)
,左边一个在(-1000,0)
。初始化程序后,原来的屏幕位置(可见部分) 在右边的点附近,就像 pic1 show
图片 1:[1]: https://i.stack.imgur.com/KtPRN.png
现在我想使用坐标 将屏幕(可见部分)移动到左点 以便我可以看到它(图 2)。我应该怎么做?
图2: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()
我相信以下内容符合您的描述。当 window 打开时,它以 (0, 0)
为中心,点 a
在右侧可见,点 b
根本不可见。当您单击 window 时,它会滚动以使 window 以点 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()
为此,我们必须访问 turtle 的 tkinter Canvas
基础。但是,Canvas
坐标系与 turtle 的坐标系不同,因此我们必须按照代码注释中的说明进行调整。