Captura de pantalla de una ventana usando python
Frecuentes
Visto 10,917 veces
8
Estoy tratando de tomar una captura de pantalla de la ventana actual usando un script de Python en Linux.
Actualmente tengo un script que toma una captura de pantalla de toda la pantalla:
import sys
from PyQt4.QtGui import QPixmap, QApplication
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
QPixmap.grabWindow(QApplication.desktop().winId()).save(filename, 'jpg')
Pero a me gustaría tener solo la ventana seleccionada. Sé que el problema proviene de grabWindow. Pero no se como solucionarlo.
4 Respuestas
9
simplemente reemplace
QApplication.desktop()
con el widget del que desea tomar la captura de pantalla.
import sys
from PyQt4.QtGui import *
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
widget = QWidget()
# set up the QWidget...
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)
def shoot():
p = QPixmap.grabWindow(widget.winId())
p.save(filename, 'jpg')
label.setPixmap(p) # just for fun :)
print "shot taken"
widget.layout().addWidget(QPushButton('take screenshot', clicked=shoot))
widget.show()
app.exec_()
contestado el 22 de mayo de 12 a las 17:05
7
Desde Qt5, grabWindow
y grabWidget
están obsoletos (ver Miembros obsoletos para QPixmap)
En su lugar, puede utilizar QWidget.grab()
p=widget.grab()
Respondido 12 Oct 15, 09:10
0
Alternativamente, en lugar de
p = QPixmap.grabWindow(widget.winId())
también puedes usar
p = QPixmap.grabWidget(widget)
Respondido 06 ago 14, 11:08
0
PyQt5 actualización
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QPixmap, QScreen
from datetime import datetime
date = datetime.now()
filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
app = QApplication(sys.argv)
QScreen.grabWindow(app.primaryScreen(),
QApplication.desktop().winId()).save(filename, 'png')
Respondido 01 Feb 20, 19:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python pyqt or haz tu propia pregunta.
Eso no funciona en caso de que tenga un área de desplazamiento dentro de MainWindow. Solo imprime la parte superior de la ventana. - Chris P