2011-12-27 23 views
8

我需要截取屏幕截圖並通過郵件發送到Web服務。我認爲對於後期我將使用liburl。在Python中截屏 - 跨平臺

這可以完全跨平臺完成,而不需要最終用戶安裝額外的庫/軟件?

+1

我想你可以使用wxPython的。請參閱Andrea Gavanas的答案:http://wxpython-users.1045709.n5.nabble.com/how-to-take-a-screenshot-td2357826.html – 2011-12-27 13:15:50

+0

但我的用戶需要安裝wxpython嗎?或者僅僅通過編譯二進制文件的程序? – 2011-12-27 13:57:00

+0

Python不編譯。它由解釋器運行。但是你的權利,他們必須安裝wxpython這是非常標準的反正,如果你不把它與安裝腳本捆綁... – 2011-12-27 14:50:55

回答

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 2012-03-25 00:50:50

+0

@Lipis不幸的是,沒有簡單的修復,這裏是關於這個問題的討論http://wxpython-users.1045709.n5.nabble.com/ScreenDC -wxMac-td2358205.html – 2012-03-25 06:46:52

+0

它不佔用所有的窗口,我有一個程序彈出窗口不在屏幕上..奇怪。 – arsenik 2015-03-05 17:05:17

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