8

Linuxでpythonスクリプトを使用して、現在のウィンドウのスクリーンショットを撮ろうとしています。

現在、画面全体のスクリーンショットを撮るスクリプトがあります。

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

しかし、選択したウィンドウだけが必要です。問題がgrabWindowにあることはわかっています。しかし、私はそれを解決する方法がわかりません。

4

4 に答える 4

9

単純に置き換える

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_()
于 2012-05-22T16:26:17.403 に答える
7

Qt5 以降、grabWindow廃止されましたgrabWidget( QPixmap の廃止されたメンバーを参照) 。

代わりに、使用できますQWidget.grab()

p=widget.grab()
于 2015-10-12T08:00:45.673 に答える