首页 > 解决方案 > 如何捕获 tkinter 窗口的屏幕截图并将其存储到文件中?

问题描述

我正在尝试创建一个专门截取 tkinter 窗口的函数。

这是目前我发现的最好的方法:

    def save():
        pyautogui.keyDown('alt')
        pyautogui.keyDown('printscreen')
        pyautogui.keyUp('printscreen')
        pyautogui.keyUp('alt')
        self.img = ImageGrab.grabclipboard()
        self.img.save('paste.jpg', 'JPEG')

self.dataSend = Button(main, text = "Send", command = save).grid(column = 1, row = 13, sticky = W)

我使用的原因pyautogui.keyDownUp因为alt + screenshot此单击功能打印仅屏幕应用程序窗口。

但有时当我单击按钮时会Save出现错误:

    self.img.save('paste.jpg', 'JPEG')
AttributeError: 'NoneType' object has no attribute 'save'

还有其他选择吗?并有一种更流畅的方式来通过单击按钮截取 tkinter 窗口并存储 jpg 文件?

标签: pythontkinterscreenshotkeydownpyautogui

解决方案


您应该使用pyscreenshot

import pyscreenshot
pyscreenshot.grab().save('screenshot.png')

如果您需要获取屏幕的一部分,可以使用该选项:

im = pyscreenshot.grab(bbox=(10, 10, 510, 510))  # X1,Y1,X2,Y2
im.save('screenshot.png')

或使用PillowImageGrab从剪贴板保存:

im = ImageGrab.grabclipboard()
im.save('screenshot.png')

它对我有用:

pyautogui.hotkey('alt', 'printscreen')
img = ImageGrab.grabclipboard()
img.save('screenshot.png')

请注意grabclipboard仅适用于 Windows 和 Mac OS


推荐阅读