猿问

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

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

但它没有用。


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


回首忆惘然
浏览 108回答 2
2回答

慕婉清6462132

您需要在调用root.update_idletasks()后调用root.withdraw()以强制 tkinter 重绘窗口(或者在这种情况下,从视图中删除窗口)。如果您发现这root.update_idletasks()不会导致窗口在您的平台上隐藏,您可以尝试root.update(). update_idletasks不过应该可以。

UYOU

我在运行 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()
随时随地看视频慕课网APP

相关分类

Python
我要回答