2012-05-22 4 views
6

Sto provando a fare uno screenshot della finestra curenta usando uno script python su linux.Screenshot di una finestra usando python

ho curently avere uno script che prende uno screenshot di tutto lo schermo:

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') 

Ma vorrebbe avere solo la finestra selezionata. So che il problema viene da grabWindow. Ma non so come risolverlo.

risposta

6

semplicemente sostituire

QApplication.desktop() 

con il widget si vuole prendere lo screenshot.

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_() 
0

In alternativa, invece di

p = QPixmap.grabWindow(widget.winId()) 

è anche possibile utilizzare

p = QPixmap.grabWidget(widget)