如何在截屏前最小化tkinter应用,然后最大化

问题描述 投票:0回答:2

我有一个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()

尽管需要截图,但也会捕获应用程序窗口

sample screenshot taken by this app

我不要屏幕截图中的白色窗口。我试图最小化窗口,然后通过更新如下函数最大化:

def takeShot():
    root.withdraw()
    sc = ImageGrab.grab()
    root.deiconify()
    path = filedialog.asksaveasfilename(defaultextension='.png')
    sc.save(path)

但是没用。

总有没有最小化应用程序,然后截取屏幕截图,然后将其最大化以保存对话框,以便捕获fulscreen ??

python tkinter screenshot
2个回答
0
投票

您需要在调用root.update_idletasks()之后调用root.withdraw(),以强制tkinter重新绘制窗口(或在这种情况下,从视图中删除窗口)。

如果发现root.update_idletasks()不会导致窗口在您的平台上隐藏,则可以尝试root.update()。 [update_idletasks应该可以。


0
投票

我在运行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()
© www.soinside.com 2019 - 2024. All rights reserved.