Postscript 设计用于在纸张或胶片等介质上制作标记,而不是光栅图形。因此,它本身没有可以设置为给定颜色的背景颜色,因为这通常是所使用的纸张或未曝光胶片的颜色。
为了模拟这一点,您需要绘制一个与画布大小相同的矩形,并用您想要的颜色填充它作为背景。我没有在 turtle 模块中看到任何查询返回的画布对象的getcanvas()
内容,我能想到的唯一替代方法是读取 turtle.cfg 文件(如果有的话),或者只是硬编码默认的 300x400 大小。您也许可以查看源代码并找出当前画布的尺寸存储在哪里并直接访问它们。
更新:
我只是在 Python 控制台中使用该turtle
模块,发现画布返回的内容有getcanvas()
一个私有属性,称为. 该对象具有似乎包含当前海龟图形窗口尺寸的方法。所以我会尝试画一个那个大小的填充矩形,看看它是否能给你想要的东西。_canvas
<Tkinter.Canvas instance>
winfo_width()
winfo_height()
更新 2:
这是显示如何执行我建议的代码。注意:背景必须在任何其他图形之前绘制,否则创建的实心填充背景矩形将覆盖屏幕上的所有其他内容。
此外,添加的draw_background()
功能会努力保存并稍后将图形状态恢复到原来的状态。根据您的具体使用情况,这可能不是必需的。
import turtle
def draw_background(a_turtle):
""" Draw a background rectangle. """
ts = a_turtle.getscreen()
canvas = ts.getcanvas()
height = ts.getcanvas()._canvas.winfo_height()
width = ts.getcanvas()._canvas.winfo_width()
turtleheading = a_turtle.heading()
turtlespeed = a_turtle.speed()
penposn = a_turtle.position()
penstate = a_turtle.pen()
a_turtle.penup()
a_turtle.speed(0) # fastest
a_turtle.goto(-width/2-2, -height/2+3)
a_turtle.fillcolor(turtle.Screen().bgcolor())
a_turtle.begin_fill()
a_turtle.setheading(0)
a_turtle.forward(width)
a_turtle.setheading(90)
a_turtle.forward(height)
a_turtle.setheading(180)
a_turtle.forward(width)
a_turtle.setheading(270)
a_turtle.forward(height)
a_turtle.end_fill()
a_turtle.penup()
a_turtle.setposition(*penposn)
a_turtle.pen(penstate)
a_turtle.setheading(turtleheading)
a_turtle.speed(turtlespeed)
s = turtle.Screen()
s.bgcolor("orange")
bob = turtle.Turtle()
draw_background(bob)
ts = bob.getscreen()
canvas = ts.getcanvas()
bob.circle(250)
canvas.postscript(file="turtle.eps")
s.exitonclick() # optional
这是产生的实际输出(通过 Photoshop 在屏幕上渲染):