我有一个 python tkinter 应用程序脚本,可以在按下按钮时截取屏幕截图。但不幸的是,在截屏时,应用程序的窗口也被捕获。这是应用程序的代码:from PIL import ImageGrabimport tkinter as tkfrom tkinter import filedialogimport timedef 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)但它没有用。有没有办法最小化应用程序然后截取屏幕截图然后最大化它以保存对话框以便捕获全屏?
2 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
您需要在调用root.update_idletasks()
后调用root.withdraw()
以强制 tkinter 重绘窗口(或者在这种情况下,从视图中删除窗口)。
如果您发现这root.update_idletasks()
不会导致窗口在您的平台上隐藏,您可以尝试root.update()
. update_idletasks
不过应该可以。
UYOU
TA贡献1878条经验 获得超4个赞
我在运行 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()
添加回答
举报
0/150
提交
取消