Python-turtle导出大尺寸Postscript(.eps)矢量图的解决方案咨询
问题描述
我正在寻找使用Python-turtle导出大尺寸矢量图的方法,目前找到了一种可在Adobe Illustrator中打开的Postscript格式导出方法,代码如下:
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2023.4.14 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FIRST from tkinter import * from turtle import * # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A3 = 1587.1183 screensize(1720,1320) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MAIN # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ROUND_UP ts = getscreen() ts.getcanvas().postscript(file = "first.eps")
由于设置的画布尺寸(1720x1320)大于笔记本屏幕尺寸(1366x768),Python-turtle窗口会出现滚动条,部分绘图内容被隐藏,导出的.eps文件也仅包含屏幕显示的部分。请问是否有办法导出完整的矢量图?是否可借助tkinter的ScrolledCanvas(master)命令实现?
解决方案
方法1:显式指定导出尺寸,规避屏幕限制
turtle的postscript()方法默认仅捕获窗口显示区域,只需给该方法传入画布实际尺寸参数,同时隐藏窗口避免显示干扰,即可导出完整内容:
from tkinter import * from turtle import * # 定义画布实际尺寸 canvas_width = 1720 canvas_height = 1320 screensize(canvas_width, canvas_height) # 隐藏turtle窗口,避免屏幕尺寸限制 root = Tk() root.withdraw() # 此处添加你的绘图逻辑 # ... # 导出完整EPS,指定width和height为画布实际尺寸 ts = getscreen() canvas = ts.getcanvas() canvas.postscript(file="full_canvas.eps", width=canvas_width, height=canvas_height)
方法2:基于ScrolledCanvas实现无窗口限制绘图
可以将turtle绑定到tkinter.ScrolledCanvas上,完全脱离屏幕显示尺寸的约束,直接导出完整画布:
from tkinter import * from turtle import TurtleScreen, RawTurtle # 创建主窗口并隐藏 root = Tk() root.withdraw() # 创建ScrolledCanvas并设置实际画布尺寸 canvas_width = 1720 canvas_height = 1320 scrolled_canvas = ScrolledCanvas(root, width=canvas_width, height=canvas_height) scrolled_canvas.pack() # 将turtle绑定到自定义的ScrolledCanvas screen = TurtleScreen(scrolled_canvas) turtle = RawTurtle(screen) # 此处添加你的绘图逻辑 # ... # 导出完整EPS,指定画布实际尺寸 scrolled_canvas.postscript(file="full_scrolled.eps", width=canvas_width, height=canvas_height)
关键注意点
- 核心是给
postscript()方法显式传入width和height参数,覆盖默认的屏幕显示尺寸,确保导出范围为完整画布。 - 调用
root.withdraw()隐藏窗口,可彻底避免屏幕尺寸对画布显示和导出的限制,同时不影响绘图流程。
内容的提问来源于stack exchange,提问作者user21640453
相关产品推荐
相关产品推荐

