我可以在PythonTkinter画布上对图像进行“截屏”并将其保存在文件中吗?

2024-03-29 07:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个在Python tkinter画布上制作图像的程序,但我不知道如何保存我创建的图像。它可以是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, 0, 1100, 1000))
    im.save('mypic.png')

canvas.mainloop()

我删除了一些代码,因为它不重要。 但是它没有我的画布就可以截图了


Tags: 代码图像importpngtkinter画布widthcanvas
1条回答
网友
1楼 · 发布于 2024-03-29 07:28:28

由于没有提供任何代码,我将给您一个如何实现这一点的示例。默认情况下,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

注意(根据WineUnouchs2UNIX):ImageGrab不受Linux支持,可使用ImageGrab alternative in linux

相关问题 更多 >