2012-05-22 2 views
6

Ich versuche einen Screenshot des aktuellen Fensters mit einem Python-Skript unter Linux zu erstellen.Screenshot eines Fensters mit Python

Ich habe curently ein Skript, das einen Screenshot des gesamten Bildschirms nimmt:

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

Aber möchte nur das ausgewählte Fenster haben. Ich weiß, dass das Problem von grabWindow kommt. Aber ich weiß nicht, wie ich es lösen soll.

Antwort

6

einfach

QApplication.desktop() 

mit dem Widget ersetzen Sie den Screenshot zu nehmen.

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

Alternativ kann statt

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

können Sie auch

p = QPixmap.grabWidget(widget) 
3

Seit QT5 verwenden, grabWindow und grabWidget veraltet sind (siehe Obsolete Members for QPixmap)

Stattdessen können Sie verwenden QWidget.grab()

p=widget.grab()