python - 如何捕获 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.keyDown
是Up
因为alt + screenshot
此单击功能打印仅屏幕应用程序窗口。
但有时当我单击按钮时会Save
出现错误:
self.img.save('paste.jpg', 'JPEG')
AttributeError: 'NoneType' object has no attribute 'save'
还有其他选择吗?并有一种更流畅的方式来通过单击按钮截取 tkinter 窗口并存储 jpg 文件?
解决方案
您应该使用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
推荐阅读
- mysql - 在mysql的过程中使用自定义(用户定义)函数
- octave - 在 Octave 中使用 ode45 求解 ODE
- python - askopenfilename() 不正确
- python-sphinx - 当我为继承 param.Parameterized 的类制作 sphinx-build 文档时出现格式错误
- javascript - window.onload 将每个值设置为 0
- javascript - 失败 1 :- 请在创建 Javascript Palindrome 检查时检查 JavaScript 程序逻辑
- python-3.x - 如何在jenkins管道调用的python脚本中使用全局凭据
- android - 是否可以在本机中构建一个允许从锁定屏幕进行交互的应用程序,例如谷歌地图?
- flutter - 如何解决“无法无条件访问属性'length',因为接收者可以为'null'”
- c++ - 如何将dll中的函数调用重定向到主应用程序