【问题标题】:How to minimize a tkinter app before taking screenshot and then maximize如何在截屏之前最小化 tkinter 应用程序然后最大化
【发布时间】:2020-02-12 18:26:05
【问题描述】:

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

但是没有用。

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

【问题讨论】:

    标签: python tkinter screenshot


    【解决方案1】:

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

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

    【讨论】:

    • 我刚刚用root.update() 试过这个,屏幕截图中仍然存在窗口。我必须添加 time.sleep(0.5) 才能让 Windows 的窗口关闭动画有时间完成。
    【解决方案2】:

    我在运行 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2016-08-15
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多