目的
僕がPyQt5で画面キャプチャをしたかった時に詰まったので,解決法を共有します.
結果だけ見てしまえば単純なんです.
しかし,この記事を書いた時点ではネット上にPyQt4の情報が多く情報が混在していたため,書いておきます.
環境
- Python: 3.5.2
- PyQt: 5.7
- OS: MacOS 10.11.6 (Windows 10でも動作確認しました.)
依存
- PyQt5 (Pythonモジュール)
結論
QGraphicsViewの場合
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QGraphicsView()
view.show()
view.grab().save("test.png")
print("test.png is saved!")
sys.exit(app.exec_())
PyQt4との違い
PyQt4においては,grabWindow()で現在のウインドウを取得し,それをQPixmapに渡して出力していたようです.
しかし,参考文献からわかるようにその機能がPyQt5で使われなくなり,上のように簡易的な表現となっています.
返り値を見てみると,内部的な受け渡しではQPixmapが使われていますが,
現在の結果を出力するだけであれば,ユーザが明示的にQPixmapを定義する必要は無くなりました.
PyQt4のソースコードを乗せると結論が分かりにくくなるので,ここには書かないことにします.