2013-07-29 41 views
0

我試圖去設置鏈接,並使用PyQt的拍攝有快照,代碼工作正常的一個網址:PyQt的圖像捕捉錯誤

#!/usr/bin/env python 
import sys, itertools 
import signal 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import QWebPage 

urls = "http://www.gouvernement.fr/", "http://www.google.com/" 
outputs = "output1.png", "output2.png" 
#for url in urls: #and output in ouputs: 
for url, output in itertools.izip(urls, outputs): 

    def onLoadFinished(result): 
    if not result: 
     print "Request failed" 
     sys.exit(1) 

    # Set the size of the (virtual) browser window 
    webpage.setViewportSize(webpage.mainFrame().contentsSize()) 

    # Paint this frame into an image 
    image = QImage(webpage.viewportSize(), QImage.Format_ARGB32) 
    painter = QPainter(image) 
    webpage.mainFrame().render(painter) 
    painter.end() 
    image.save(output) 
    print ".png image successfully saved" 
    #sys.exit(0) 


    app = QApplication(sys.argv) 
    signal.signal(signal.SIGINT, signal.SIG_DFL) 

    webpage = QWebPage() 
    webpage.connect(webpage, SIGNAL("loadFinished(bool)"), onLoadFinished) 
    webpage.mainFrame().load(QUrl(url)) 
    sys.exit(app.exec_()) 

但是,因爲它去throuhg一個快照,它只是掛起和犯規繼續下一個快照。這是爲什麼 ?

+0

寫入的代碼將不會運行,因此很難說出你打算如何工作。 –

+0

現在更正。 – Scooby

回答

1

您粘貼的代碼的縮進並不能說明您的for循環的走向有多遠 - 我認爲每次都會在循環內結束?

如果是這樣,那麼它的清楚爲什麼你的代碼不起作用:你叫app.exec_,這將阻止,直到最後一個窗口被關閉或您撥打quitexit。就像你永遠不會做的那樣,它會永遠阻止

如果你想以這種方式處理多個URL,你應該使用你的事件處理程序來保存頁面並加載下一個URL。像這樣的東西應該工作:

#!/usr/bin/env python 
import sys, itertools 
import signal 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import QWebPage 

urls = ["http://www.gouvernement.fr/", "http://www.google.com/"] 
outputs = ["output1.png", "output2.png"] 

def save_page(webpage, output): 
    # Set the size of the (virtual) browser window 
    webpage.setViewportSize(webpage.mainFrame().contentsSize()) 

    # Paint this frame into an image 
    image = QImage(webpage.viewportSize(), QImage.Format_ARGB32) 
    painter = QPainter(image) 
    webpage.mainFrame().render(painter) 
    painter.end() 
    image.save(output) 
    print ".png image successfully saved" 
    #sys.exit(0) 


app = QApplication(sys.argv) 
signal.signal(signal.SIGINT, signal.SIG_DFL) 

webpage = QWebPage() 

def onLoadFinished(result): 
    if not result: 
     print "Request failed" 
     sys.exit(1) 
    save_page(webpage, outputs.pop(0)) # pop output name from list and save 
    if urls: 
     url = urls.pop(0) # pop next url to fetch from list 
     webpage.mainFrame().load(QUrl(url)) 
    else: 
     app.quit() # exit after last url 

webpage.connect(webpage, SIGNAL("loadFinished(bool)"), onLoadFinished) 
webpage.mainFrame().load(QUrl(urls.pop(0))) 
sys.exit(app.exec_()) 
+0

是的,你糾正了縮進,但我試過你的代碼,它通過循環遞歸但python崩潰soem的原因,甚至圖像不保存。你試過了嗎? – Scooby

+0

是的,我試過了。該代碼完全按照原樣對我進行工作。 – mata

+0

好吧,它會生成圖像,但仍會在桌面和筆記本電腦上崩潰我的python。我仍然可以看到照片。非常奇怪,但謝謝! – Scooby