python - 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()
解决方案
我相信以下内容符合您的描述。当窗口打开时,它居中(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()
为此,我们必须访问Canvas
turtle 的tkinter 基础。但是,Canvas
坐标系与海龟的不同,因此我们必须按照代码注释中的说明进行调整。
推荐阅读
- c++ - 使用 g++ 在 linux 中编译
- node.js - Nestjs Redis 事件监听器
- ruby-on-rails - rails 多个请求混合在日志中
- python - 将 Jaeger Python 客户端与 Luigi 一起使用
- gradle - Liferay 模块构建问题
- pandas - 我可以在 Pandas 数据框中使用可以为空的布尔类型吗?
- javascript - 在项目构建之后(通过 Ionic build 命令),当我点击我的 ionic react 项目的 index.html 文件时出现错误
- flutter - 如何防止在 Flutter 的 InheritedWidget 中重新创建小部件?
- python - Pandas 对 Numpy 不同的 dtype 数组进行投射
- java - 从一个类返回到另一个类的方法