我是Python的新手,并且一直在使用海龟模块作为学习语言的一种方式。
感谢stackoverflow,我研究并学习了如何将图像复制到封装的postscript文件中,并且效果很好。然而,有一个问题。 turtle
模块允许在屏幕上显示但未显示在.eps
文件中的背景颜色。所有其他颜色,即笔颜色和乌龟颜色,使它通过,但不是背景颜色。
感兴趣的是,我不相信导入Tkinter
是必要的,因为我不相信我在这里使用任何Tkinter
模块。我将其作为尝试诊断问题的一部分。我还使用了bgcolor=Orange
而不是s.bgcolor="orange"
。
没有欢乐。
我包含一个简单的代码示例:
# Python 2.7.3 on a Mac
import turtle
from Tkinter import *
s=turtle.Screen()
s.bgcolor("orange")
bob = turtle.Turtle()
bob.circle(250)
ts=bob.getscreen()
ts.getcanvas().postscript(file = "turtle.eps")
我尝试发布屏幕图像和 .eps
文件,但stackoverflow不允许我以新用户身份发布。某种垃圾邮件预防。虽然简单到可视化,但屏幕背景颜色为橙色,eps文件为白色。
我很感激任何想法。
答案 0 :(得分:3)
Postscript的设计目的是在某些媒体上制作标记,如纸张或胶片,而不是光栅图形。因此,它本身没有可以设置为给定颜色的背景颜色,因为这通常是纸张或未曝光胶片的颜色。
为了模拟这个,您需要绘制一个与画布大小相同的矩形,并用您想要的颜色作为背景填充它。我没有在turtle模块中看到查询getcanvas()
返回的canvas对象的任何内容,我唯一能想到的是读取turtle.cfg文件(如果有的话),或者只是硬编码默认的300x400大小。您可以查看源代码并找出当前画布的尺寸存储位置并直接访问它们。
<强>更新强>
我正在使用turtle
模块在Python控制台中玩游戏,并发现画布getcanvas()
返回的内容有一个名为_canvas
的私有属性<Tkinter.Canvas instance>
。此对象具有winfo_width()
和winfo_height()
方法,这些方法似乎包含当前海龟图形窗口的尺寸。所以我会尝试绘制一个这样大小的填充矩形,看看它是否能给你你想要的东西。
更新2:
以下代码显示了如何做我建议的内容。 注意:在任何其他图形之前必须绘制背景,否则创建的实心填充背景矩形将覆盖屏幕上的其他所有内容。
此外,添加的draw_background()
函数需要花费大量精力来保存并稍后将图形状态恢复到原来的状态。根据您的确切用法情况,这可能没有必要。
import turtle
from Tkinter import *
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 = bob.heading()
turtlespeed = bob.speed()
penposn = bob.position()
penstate = bob.pen()
bob.penup()
bob.speed(0) # fastest
bob.goto(-width/2-2, -height/2+3)
bob.fillcolor(turtle.Screen().bgcolor())
bob.begin_fill()
bob.setheading(0)
bob.forward(width)
bob.setheading(90)
bob.forward(height)
bob.setheading(180)
bob.forward(width)
bob.setheading(270)
bob.forward(height)
bob.end_fill()
bob.penup()
bob.setposition(*penposn)
bob.pen(penstate)
bob.setheading(turtleheading)
bob.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在屏幕上呈现):
答案 1 :(得分:1)
我还没有找到在生成的(Encapsulated)PostScript文件上获取画布背景颜色的方法(我怀疑它是不可能的)。但是,您可以使用颜色填充圆圈,然后按照@mgilson:
的建议使用Canvas.postscript(colormode='color')
import turtle
bob = turtle.Turtle()
bob.fillcolor('orange')
bob.begin_fill()
bob.circle(250)
bob.begin_fill()
ts = bob.getscreen()
ts.getcanvas().postscript(file='turtle.eps', colormode='color')