我有一个python tkinter应用程序脚本,可以在按下按钮时获取屏幕截图。但不幸的是,在截取屏幕截图时,该应用程序的窗口也被捕获了。
这是应用程序的代码:
from PIL import ImageGrab
import tkinter as tk
from tkinter import filedialog
import time
def takeShot():
sc = ImageGrab.grab()
path = filedialog.asksaveasfilename(defaultextension='.png')
sc.save(path)
root = tk.Tk()
canvas1 = tk.Canvas(root,width=300,height=300)
canvas1.pack()
but = tk.Button(text='Take Screenshot',command=takeShot,bg='green',fg='white',font=10)
canvas1.create_window(150,150,window=but)
root.mainloop()
尽管需要截图,但也会捕获应用程序窗口
我不要屏幕截图中的白色窗口。我试图最小化窗口,然后通过更新如下函数最大化:
def takeShot():
root.withdraw()
sc = ImageGrab.grab()
root.deiconify()
path = filedialog.asksaveasfilename(defaultextension='.png')
sc.save(path)
但是没用。
总有没有最小化应用程序,然后截取屏幕截图,然后将其最大化以保存对话框,以便捕获fulscreen ??
您需要在调用root.update_idletasks()
之后调用root.withdraw()
,以强制tkinter重新绘制窗口(或在这种情况下,从视图中删除窗口)。
如果发现root.update_idletasks()
不会导致窗口在您的平台上隐藏,则可以尝试root.update()
。 [update_idletasks
应该可以。
我在运行Python 3.8.1的Windows中没有问题。但是,我建议将asksaveasfilename(...)
移到root.withdraw()
之后,因为asksaveasfilename(...)
是模式对话框,并在关闭后返回:
def take_snapshot():
root.withdraw()
filename = filedialog.asksaveasfilename(initialdir='.', defaultextension='.png')
if filename:
image = ImageGrab.grab()
image.save(filename)
root.deiconify()