我可以在 Python Tkinter Canvas 上做 'screenshot' 图像并将其保存在文件中吗?
Can I do 'screenshot' of image on the Python Tkinter Canvas and save it in the file?
我在 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, 0, 1100, 1000))
im.save('mypic.png')
canvas.mainloop()
我删除了一些代码,因为它不重要。
但是它在没有我的 canvas!
的情况下制作了屏幕截图
由于没有提供代码,我将举例说明如何完成此操作。默认情况下,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))
,这里有一张图片可以帮助您更好地理解侧面:
注意(根据 WinEunuuchs2Unix):ImageGrab
不支持 Linux,替代方法是使用
更新(根据 Carsten Fuchs):ImageGrab
现在支持 Linux,可能需要先更新库
我在 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, 0, 1100, 1000))
im.save('mypic.png')
canvas.mainloop()
我删除了一些代码,因为它不重要。 但是它在没有我的 canvas!
的情况下制作了屏幕截图由于没有提供代码,我将举例说明如何完成此操作。默认情况下,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))
,这里有一张图片可以帮助您更好地理解侧面:
注意(根据 WinEunuuchs2Unix):ImageGrab
不支持 Linux,替代方法是使用
更新(根据 Carsten Fuchs):ImageGrab
现在支持 Linux,可能需要先更新库