Python pyqt4 seg故障顺序应用程序启动-停止
我正在尝试使用pyqt阅读网页。我需要使用不同的URL多次调用一个方法。我目前使用的代码类似于: 然而,当我尝试时,我会遇到seg故障。欢迎任何建议Python pyqt4 seg故障顺序应用程序启动-停止,python,segmentation-fault,pyqt4,Python,Segmentation Fault,Pyqt4,我正在尝试使用pyqt阅读网页。我需要使用不同的URL多次调用一个方法。我目前使用的代码类似于: 然而,当我尝试时,我会遇到seg故障。欢迎任何建议 import sys from time import clock from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtWebKit import * from PyQt4.QtNetwork import * class Render(QWebPage): d
import sys
from time import clock
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from PyQt4.QtNetwork import *
class Render(QWebPage):
def __init__(self):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.networkAccessManager().finished.connect(self.handleEnd)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff)
self.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff)
def loadURL(self, url):
self.mainFrame().load(QUrl(url))
self.app.exec_()
def savePageImage (self, width, height, Imagefile):
pageSize = self.mainFrame().contentsSize();
if width == 0:
pageWidth = pageSize.width()
else:
pageWidth = width
if height == 0:
pageHeight = pageSize.height()
else:
pageHeight = height
self.setViewportSize(QSize(pageWidth, pageHeight))
Img = QImage(self.viewportSize(), QImage.Format_ARGB32)
painter = QPainter(Img)
self.mainFrame().render(painter)
painter.end()
Img.save(Imagefile)
def _loadFinished(self, result):
print "load finish"
self.frame = self.mainFrame()
self.returnVal = result
self.app.quit()
def handleEnd (self, reply):
# get first http code and disconnect
# could add filter to listen relevant responses
self.httpcode = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
self.networkAccessManager().finished.disconnect(self.handleEnd)
jsrurl = 'http://www.w3resource.com/javascript/document-alert-confirm/four.html'
badurl='something.or.other'
badhttp = 'http://eclecticself.com/test2.html'
testurl = 'http://www.nydailynews.com/entertainment/index.html'
testurl2 = 'http://www.palmbeachpost.com/'
testurl3 = 'http://www.nydailynews.com/news/politics/2011/08/03/2011-08-03_pat_buchanan_downplays_controversy_after_calling_president_obama_your_boy_to_rev.html'
url = testurl
start = clock()
r = Render()
r.loadURL(url)
html = r.frame.toHtml()
elapsed = clock() - start
print elapsed
if (r.returnVal == True):
if (r.httpcode.toInt()[0] != 404):
#print html.toUtf8()
start = clock()
r.savePageImage(1024, 0, "pageSnapshot.png")
elapsed = clock() - start
print elapsed
else:
print 'page not found'
else:
print 'badurl'
s = Render()
s.loadURL(jsrurl)
html = s.frame.toHtml()
elapsed = clock() - start
print elapsed
if (s.returnVal == True):
if (s.httpcode.toInt()[0] != 404):
print html.toUtf8()
start = clock()
s.savePageImage(1024, 0, "pageSnapshot.png")
elapsed = clock() - start
print elapsed
else:
print 'page not found'
else:
print 'badurl'
PyQt经常忘记保留对对象的引用。解决办法:
- 尝试使用PyQt代替PyQt,这很容易,因为API几乎与PyQt完全相同。我会首先尝试PySide,它可能会立即解决您的问题,或者至少使其可预测且可复制
- 尝试保留对正在使用的所有Qt对象的引用,并在处理完这些对象后删除这些引用。在转到下一个网页之前,您还可以尝试显式关闭它们或导航到“about:blank”
我的灵魂与你同在,这样的问题很难找到 把打印的语句放在各处,找出你到底从哪里得到的。我怀疑正在初始化QApplication。是的,找不到任何原因。尝试了PySide相同的结果。基本上想退出应用程序而不是重启应用程序