如何拍摄由 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)?的主要内容,如果未能解决你的问题,请参考以下文章