保存海龟绘图

问题描述

我正在制作一个 python 程序,它绘制一个正方形,我希望用户能够在用户按下 q 时保存绘图。它所做的只是将图像添加到 ide 文件目录中。如果有帮助,我会使用 Replit 作为我的 ide。它不会将其直接保存到用户文件中。相关代码如下:

import turtle
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
turtle.forward(50)
turtle.left(90)
def save():
 ts = turtle.getscreen()
 ts.getcanvas().postscript(file="Square.png")
turtle.onkeypress(save,key="q")

提前致谢!

如果是操作系统特定的 Windows、Chrome 操作系统和 Mac。

解决方法

我相信其他人会想知道如何做,所以正确回答这个问题是一个不错的问题。这可以做到,但是您需要使用本机 Tk 方法,而不是尝试依赖 Turtle 脚本。 Pillow 也有帮助,因为您可以获得更好的渲染效果。

我记得,背景颜色不显示。要获取背景信息,您需要对屏幕截图实用程序进行子进程调用,该实用程序允许在您的操作系统上使用命令行(例如 Linux 上的 scrot)。

#! /usr/bin/python3

import tkinter as tk
from tkinter import filedialog as fd
from PIL import Image  ##  Python Imaging Libary / Pillow
import turtle as trt
import os  ##  os.path.join( directory,filename )

##  pip3 install pillow

root  = tk .Tk()
root .title( 'Python Turtle' )
home  = os .environ['HOME']

Width,Height  = 500,500
canvas  = tk .Canvas( root,width=Width,height=Height )
canvas .pack()

turtle  = trt .RawTurtle( canvas=canvas )
screen  = turtle .getscreen()
##  screen .bgcolor('orange')  ##  doesn't show with canvas grab

for i in range(4):
    turtle .forward(50)
    turtle .left(90)

    def screenshot():
        filename  = 'Square'
        directory  = fd .askdirectory( initialdir=home,title='Choose folder' )
        fullpath  = os .path .join( directory,filename )
        eps,png  = f'{fullpath}.eps',f'{fullpath}.png'
        canvas .postscript( file=eps,pagewidth=Width -1,pageheight=Height -1 )
        print( 'saved',eps )
        img  = Image .open( eps )  ##  use PIL to convert to PNG
        img .save( png,'png',optimize = True,compress_level = 9 )
        os .remove( eps )
        print( f'converted to',png )

screen .onkeypress( screenshot,key='q' )
screen .listen()
root .mainloop()

https://docs.python.org/3/library/dialog.html
How can I close and re-open Turtle Screen in Python

,

看,您来这里是为了获得有关如何自己解决问题的提示。根据我的提示,您应该能够解决这个问题。这不是代码编写服务。另外,你的问题陈述不够清楚。您说“将其直接保存到用户文件中”。这对你来说代表着什么?文档目录?他的主目录?你想让他选择吗?而且你真的想每次都使用相同的文件名吗?

import os
...
def save():
   filename = os.environ["HOME"] + "/Square.png"
   ts = turtle.getscreen()
   ts.getcanvas().postscript(file=filename)
turtle.onkeypress(save,key="q")