Скриншот окна с использованием python

Я пытаюсь сделать скриншот окна curent, используя скрипт python в linux.

У меня есть скрипт, который делает скриншот всего экрана:

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

но a хотел бы иметь только выбранное окно. Я знаю, что проблема исходит от grabWindow. Но я не знаю, как это решить.

3 ответов


просто заменить

QApplication.desktop()

с виджетом, который вы хотите сделать снимок экрана.

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

С Qt5, grabWindow и grabWidget устарели (см. устаревшие члены для QPixmap)

вместо этого вы можете использовать QWidget.grab()

p=widget.grab()

вместо

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

вы также можете использовать

p = QPixmap.grabWidget(widget)