2012-05-22 4 views
6

Próbuję zrobić zrzut ekranu bieżącego okna, używając skryptu Pythona na Linuksie.Zrzut ekranu okna z pytonem:

I curently mieć skrypt, który pobiera zrzut całego ekranu:

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

Ale chciałby mieć tylko wybrane okno. Wiem, że problem pochodzi z grabWindow. Ale nie wiem, jak to rozwiązać.

Odpowiedz

6

prostu zastąpić

QApplication.desktop() 

z widgetem chcesz wziąć zrzut ekranu.

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

Alternatywnie, zamiast

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

można również użyć

p = QPixmap.grabWidget(widget)