如何拍摄由 Python-tkinter 创建的正在运行的 GUI 窗口的快照并保存为图像文件(.jpeg/.png)?

Posted

技术标签:

【中文标题】如何拍摄由 Python-tkinter 创建的正在运行的 GUI 窗口的快照并保存为图像文件(.jpeg/.png)?【英文标题】:How to take a snapshot of a running GUI window created by Python-tkinter and save as an image file (.jpeg/.png)? 【发布时间】:2020-04-25 04:37:22 【问题描述】:

我想保存用 Python-tkinter 编写的正在运行的 GUI 窗口的快照。

例如,通过单击给定代码中的“保存”按钮来保存窗口的图像。

import tkinter as tk

def set_text(val):
    entry.delete(0,tk.END)
    entry.insert(0,val)
    return entry

def save_img():
    pass

root = tk.Tk()

entry = tk.Entry(root,width=10)
entry.pack()

b1 = tk.Button(root,text="animal",command=lambda:set_text("Bird"))
b1.pack()

b2 = tk.Button(root,text="plant",command=lambda:set_text("Seed"))
b2.pack()

b3 = tk.Button(root,text="Save",command=save_img)
b3.pack(pady=20)


root.mainloop()

谢谢!

【问题讨论】:

这能回答你的问题吗? How to do a screenshot of a tkinter application? 你可以从Pillow模块尝试ImageGrab。 @FaresSalem 感谢 cmets,但我没有得到我想要的。我没有实现代码,但我从您的建议中了解到,您的解决方案正在从屏幕上截取快照,而我正在寻找的是截取 GUI 窗口的快照(无论其在屏幕上的位置/尺寸如何)。我不是软件开发人员,但由于 Python 正在生成 GUI 窗口,因此必须有一种方法可以捕获该图像而无需在屏幕上定位窗口。谢谢! @acw1668,请查看我对 FaresSalem 的评论。 @Adam 我认为您需要先定位窗口,Python 会生成窗口,是的,但它不会连续保存窗口在屏幕上的位置。保存位置的是window manager,我认为,我不知道如何获取此元数据。 【参考方案1】:

save_img 方法中,您可以先找到顶部窗口的坐标,然后将它们传递给Pyscreenshot 模块中的grab 方法。如何找到坐标? 可以从here开始:

winfo_x、winfo_y 和 winfo_width 等方法可能会对您有所帮助。

【讨论】:

以上是关于如何拍摄由 Python-tkinter 创建的正在运行的 GUI 窗口的快照并保存为图像文件(.jpeg/.png)?的主要内容,如果未能解决你的问题,请参考以下文章

Python-tkinter实现简单的文本编辑器

python-tkinter学习

python-tkinter学习

python-tkinter学习

如何检测图像是不是不是由 iPhone 相机拍摄的?

Python-Tkinter 组件之Toplevel