Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt图像捕获错误_Python_Python 2.7_Pyqt_Pyqt4_Image Capture - Fatal编程技术网

Python PyQt图像捕获错误

Python PyQt图像捕获错误,python,python-2.7,pyqt,pyqt4,image-capture,Python,Python 2.7,Pyqt,Pyqt4,Image Capture,我正在尝试使用PyQt转到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/

我正在尝试使用PyQt转到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"
 #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_())

但是,当它通过一个快照时,它只是挂起,不继续下一个快照。这是为什么?

粘贴的代码的缩进并不能清楚地表明您的
for
循环走了多远-我想每次都会一直到循环结束

如果是这样,那么代码不起作用的原因就很清楚了:你调用
app.exec\uu
,它将一直阻止,直到最后一个窗口关闭,或者你调用
quit
exit
。就像你从来没有做过的那样,它会永远阻塞

如果希望以这种方式处理多个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_())

编写的代码无法运行,因此很难判断它的工作方式。是的,您使用缩进进行了更正,但我尝试了您的代码,它确实会在循环中递归,但python因soem原因崩溃,甚至图像也无法保存。你试过了吗?是的,我试过了。这段代码对我来说没有任何问题。好吧,它生成了图像,但仍然会使我的python在台式机和笔记本电脑上崩溃。不过我还是能拍到照片。非常奇怪,但是谢谢!