如何在截屏之前最小化tkinter应用程序然后最大化

时间:2020-02-12 18:26:05

标签: python tkinter screenshot

我有一个python tkinter应用程序脚本,可以在按按钮时获取屏幕截图。但是不幸的是,在截取屏幕截图时,该应用程序的窗口也被捕获了。

这是应用程序的代码:


app:layout_constraintHorizontal_chainStyle="packed"

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

sample screenshot taken by this app

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

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()

但是没有用。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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()
相关问题