2011-12-27 12 views
8

Necesito tomar una captura de pantalla y enviarla por correo a un servicio web. Creo que para la parte de publicación usaré liburl.Captura de pantalla en Python - Cross Platform

se puede lograr esto completamente multiplataforma y sin tener la necesidad de que el usuario final para instalar bibliotecas/software adicional?

+1

Creo que se podría utilizar wxpython. Vea la respuesta de Andrea Gavanas aquí: http://wxpython-users.1045709.n5.nabble.com/how-to-take-a-screenshot-td2357826.html –

+0

pero ¿necesitarían mis usuarios instalar wxpython? o simplemente compilando el programa, ¿funcionará el binario? –

+0

Python no compilar. Se ejecuta desde el intérprete. Pero tiene razón, tienen que instalar wxpython, que es bastante estándar de todos modos si no lo agrupan con el script de instalación ... –

Respuesta

10

No hay nada en la biblioteca estándar que pueda hacer esto por usted. Teóricamente, puede hacerlo usted mismo haciendo llamadas al sistema dependientes del sistema operativo con ctypes, pero eso me parece un trabajo innecesario. Aquí es un script de trabajo para hacer una captura de pantalla con 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) 
+2

no funcionaba en MacOS .. Me estoy poniendo una imagen en negro – Lipis

+0

@Lipis No hay una solución fácil por desgracia, aquí hay una discusión sobre el tema http://wxpython-users.1045709.n5.nabble.com/ScreenDC -wxMac-td2358205.html –

+0

No toma todas las ventanas, tengo un programa emergente que no está en la captura de pantalla ... raro. – arsenik

1

también se podría utilizar para este 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')