在 Python Turtle 中将圆半径与 window 大小联系起来
Tie circle radius to window size in Python Turtle
在 Python turtle 中,当在屏幕上绘制对象时,如果有办法将圆的半径连接到 window 宽度或高度,以便可以通过更改来调整大小window 尺码?
是的,有可能。
您需要创建乌龟将监听的事件:在下面的示例中,如果您单击乌龟,将绘制一个 canvas 一半宽度的圆。
如果您调整 canvas 的大小,然后再次单击海龟,一个新的圆的一半
将重新绘制新宽度。
import turtle
def start(dummy_a, dummy_b):
t.reset()
y, x = screen.window_height(), screen.window_width()
t.home()
t.circle(x/4)
if __name__ == '__main__':
screen = turtle.Screen()
t = turtle.Turtle()
t.onclick(start, add=True)
screen.listen()
turtle.done()
这是我的替代方案点击调整绘图以调整大小window解决方案:
from turtle import Turtle, Screen
def onResize(x=0, y=0):
screen.onclick(None) # disable events inside event handler
screen.setworldcoordinates(-1, -1, 1, 1)
screen.onclick(onResize)
screen = Screen()
onResize() # establish initial coordinate system
turtle = Turtle(visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
请注意,我们不是重绘任何东西,我们只是重新调整我们的虚拟坐标(本例中的单位正方形)并让乌龟重绘东西。如果我们愿意一探究竟,我们可以更进一步:
import tkinter as tk
from turtle import RawTurtle, TurtleScreen, ScrolledCanvas
class MyTurtleScreen(TurtleScreen):
def __init__(self, cv):
super().__init__(cv)
cv.bind('<Configure>', self.onResize)
def onResize(self, event=None):
self.setworldcoordinates(-1, -1, 1, 1)
root = tk.Tk()
canvas = ScrolledCanvas(root)
canvas.pack(fill=tk.BOTH, expand=tk.YES)
screen = MyTurtleScreen(canvas)
screen.onResize() # establish initial coordinate system
turtle = RawTurtle(screen, visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
这是一个通用的 在 tkinter 中嵌入海龟的示例,除了我已经自定义 TurtleScreen
以接受 Configure
事件。现在,当您调整 window 大小时,之前的坐标系技巧会自动 启动 ,因此您无需单击 window -- 它只是发生了。
在 Python turtle 中,当在屏幕上绘制对象时,如果有办法将圆的半径连接到 window 宽度或高度,以便可以通过更改来调整大小window 尺码?
是的,有可能。
您需要创建乌龟将监听的事件:在下面的示例中,如果您单击乌龟,将绘制一个 canvas 一半宽度的圆。
如果您调整 canvas 的大小,然后再次单击海龟,一个新的圆的一半
将重新绘制新宽度。
import turtle
def start(dummy_a, dummy_b):
t.reset()
y, x = screen.window_height(), screen.window_width()
t.home()
t.circle(x/4)
if __name__ == '__main__':
screen = turtle.Screen()
t = turtle.Turtle()
t.onclick(start, add=True)
screen.listen()
turtle.done()
这是我的替代方案点击调整绘图以调整大小window解决方案:
from turtle import Turtle, Screen
def onResize(x=0, y=0):
screen.onclick(None) # disable events inside event handler
screen.setworldcoordinates(-1, -1, 1, 1)
screen.onclick(onResize)
screen = Screen()
onResize() # establish initial coordinate system
turtle = Turtle(visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
请注意,我们不是重绘任何东西,我们只是重新调整我们的虚拟坐标(本例中的单位正方形)并让乌龟重绘东西。如果我们愿意一探究竟,我们可以更进一步:
import tkinter as tk
from turtle import RawTurtle, TurtleScreen, ScrolledCanvas
class MyTurtleScreen(TurtleScreen):
def __init__(self, cv):
super().__init__(cv)
cv.bind('<Configure>', self.onResize)
def onResize(self, event=None):
self.setworldcoordinates(-1, -1, 1, 1)
root = tk.Tk()
canvas = ScrolledCanvas(root)
canvas.pack(fill=tk.BOTH, expand=tk.YES)
screen = MyTurtleScreen(canvas)
screen.onResize() # establish initial coordinate system
turtle = RawTurtle(screen, visible=False)
turtle.penup()
turtle.sety(-0.5)
turtle.pendown()
turtle.circle(0.5, steps=30)
screen.mainloop()
这是一个通用的 在 tkinter 中嵌入海龟的示例,除了我已经自定义 TurtleScreen
以接受 Configure
事件。现在,当您调整 window 大小时,之前的坐标系技巧会自动 启动 ,因此您无需单击 window -- 它只是发生了。