在Python中进行屏幕截图 -- 跨平台

8
我需要拍摄屏幕截图并通过Post方法发送到Web服务。我认为对于Post部分,我将使用liburl库。
这个目标能否完全跨平台,并且不需要最终用户安装其他库或软件?

1
我认为你可以使用wxPython。在这里查看Andrea Gavanas的答案:http://wxpython-users.1045709.n5.nabble.com/how-to-take-a-screenshot-td2357826.html - Niclas Nilsson
但是我的用户需要安装wxpython吗?还是只需编译程序,二进制代码就可以工作? - Carlos Barbosa
Python不需要编译,它是通过解释器运行的。但你说得对,他们必须安装wxpython,如果没有将其与安装脚本捆绑在一起的话,这是相当标准的。 - Niclas Nilsson
1
@Carlos,你可以将Python打包成exe(http://www.py2exe.org/或http://cx-freeze.sourceforge.net/)。这样可以将Python解释器和任何依赖项一起打包。 - Mark
但是exe似乎只适用于Windows系统,我认为我需要根据操作系统编写程序,然后使用特定的操作系统调用来进行屏幕截图。 - Carlos Barbosa
如果您正在使用Mac,可以使用命令screencapture - kyle k
2个回答

10

标准库中没有任何可以为您完成此操作的内容。理论上,您可以通过使用ctypes进行Os相关的系统调用来自己实现,但这似乎对我来说是很多不必要的工作。以下是一个使用wxPython制作屏幕截图的可行脚本:

import wx

app = wx.App(False)

s = wx.ScreenDC()
w, h = s.Size.Get()
b = wx.EmptyBitmap(w, h)
m = wx.MemoryDCFromDC(s)
m.SelectObject(b)
m.Blit(0, 0, w, h, s, 0, 0)
m.SelectObject(wx.NullBitmap)
b.SaveFile("screenshot.png", wx.BITMAP_TYPE_PNG)

@Lipis 很不幸,没有简单的解决方法,这里有一个关于该主题的讨论 http://wxpython-users.1045709.n5.nabble.com/ScreenDC-wxMac-td2358205.html - Toni Ruža
它没有收录所有窗口,我有一个弹出式程序不在截图上...奇怪。 - arsenik

2
您也可以使用PyQt5来实现这个功能:
import sys
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtWidgets import QApplication

app = QApplication(sys.argv)
screen = QGuiApplication.primaryScreen()
desktopPixmap = screen.grabWindow(0)
desktopPixmap.save('screendump.png')

这在我的Linux Mint Xfce 18.3和Windows 7上运行得非常好,谢谢! - Adrian Keister
你有什么想法,为什么突然不再给我所有的监视器了吗? - Adrian Keister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接