微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在 Python Tkinter Canvas 上对图像进行“屏幕截图”并将其保存在文件中吗?

如何解决我可以在 Python Tkinter Canvas 上对图像进行“屏幕截图”并将其保存在文件中吗?

我编写了在 Python tkinter Canvas 中制作图像的程序,但我不知道如何保存我创建的图像。它可以是 png、gif 任何东西,但我想保存我的作品!

这是我的代码

import tkinter

from PIL import Image,ImageGrab

paint = tkinter.Tk()
paint.title('paint')
canvas = tkinter.Canvas(paint,width=1100,height=1000,bd=0,highlightthickness=0)
canvas.pack()



def capture(event):
    x0 = canvas.winfo_rootx()
    y0 = canvas.winfo_rooty()
    x1 = x0 + canvas.winfo_width()
    y1 = y0 + canvas.winfo_height()

    im = ImageGrab.grab((100,1100,1000))
    im.save('mypic.png')

canvas.mainloop()

删除了一些代码,因为它并不重要。 但它在没有我的画布的情况下制作了一个截图!

解决方法

由于没有提供代码,我将举例说明这是如何完成的。默认情况下,tkinter 中有一些方法可以为您执行此操作。因此,为了截取屏幕截图,我们将使用 PIL

  • 从安装 PIL 开始:
pip install Pillow
  • 代码如下:
from tkinter import *
from PIL import Image,ImageGrab

root = Tk()

def capture():
    x0 = canvas.winfo_rootx()
    y0 = canvas.winfo_rooty()
    x1 = x0 + canvas.winfo_width()
    y1 = y0 + canvas.winfo_height()
    
    im = ImageGrab.grab((x0,y0,x1,y1))
    im.save('mypic.png') # Can also say im.show() to display it

canvas = Canvas(root,bg='red')
canvas.pack(padx=10,pady=10)

e = Entry(root)

canvas.create_window(canvas.canvasx(100),canvas.canvasy(100),window=e)

Button(root,text='Click a pic',command=capture).pack()

root.mainloop()

没什么太复杂的,坐标如下ImageGrab.grab((left,upper,right,lower)),这是一张可以帮助您更好地理解侧面的图像:

enter image description here

注意(根据 WinEunuuchs2Unix):Linux 不支持 ImageGrab,替代使用 ImageGrab alternative in linux

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。