2011-12-27 20 views
8

私はスクリーンショットを撮り、ウェブサービスに投稿する必要があります。私はポストの部分のために私はliburlを使用すると思います。Pythonでスクリーンショットを撮る - クロスプラットフォーム

最終的なユーザーが追加のライブラリ/ソフトウェアをインストールする必要はありませんが、完全にクロスプラットフォームで実行できますか?

+1

私はあなたがwxPythonのを使用することができると思います。 Andrea Gavanasの答えをご覧ください:http://wxpython-users.1045709.n5.nabble.com/how-to-take-a-screenshot-td2357826.html –

+0

私のユーザーはwxpythonをインストールする必要がありますか?バイナリは動作しますか? –

+0

Pythonはコンパイルされません。インタプリタから実行されます。しかし、あなたの権利は、インストールスクリプトと一緒にバンドルしないと、かなり標準的なwxpythonをインストールする必要があります。 –

答えて

10

これを行うための標準ライブラリには何もありません。理論的には、あなたはctypesでOS依存のシステムコールを作ることで自分自身で行うかもしれませんが、それは私にとっては不必要な作業のようです。ここでwxPythonのを使用してスクリーンショットを作成する作業スクリプトです:

import wx 

app = wx.App(False) 

s = wx.ScreenDC() 
w, h = s.Size.Get() 
b = wx.EmptyBitmap(w, h) 
m = wx.MemoryDCFromDC(s) 
m.SelectObject(b) 
m.Blit(0, 0, w, h, s, 0, 0) 
m.SelectObject(wx.NullBitmap) 
b.SaveFile("screenshot.png", wx.BITMAP_TYPE_PNG) 
+2

MacOSで動作しませんでした。黒い画像が表示されています – Lipis

+0

@Lipis残念なことに、残念ながら、件名http://wxpython-users.1045709.n5.nabble.com/ScreenDCに関する議論はありません。 -wxMac-td2358205.html –

+0

すべてのウィンドウを表示するわけではありませんが、スクリーンショットにはないプログラムのポップアップがあります。 – arsenik

1

また、このためにPyQt5を使用することができます。

import sys 
from PyQt5.QtGui import QGuiApplication 
from PyQt5.QtWidgets import QApplication 

app = QApplication(sys.argv) 
screen = QGuiApplication.primaryScreen() 
desktopPixmap = screen.grabWindow(0) 
desktopPixmap.save('screendump.png') 
関連する問題