Python PyQt图像捕获错误
我正在尝试使用PyQt转到url集并捕获这些快照,对于一个url,代码运行良好: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/
#!/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在台式机和笔记本电脑上崩溃。不过我还是能拍到照片。非常奇怪,但是谢谢!