我在PyQt4中编写了代码来搜索网站及其内部框架。
import sys, signal
from PyQt4 import QtGui, QtCore, QtWebKit
class Sp():
def save(self, ok, frame=None):
if frame is None:
print ('main-frame')
frame = self.webView.page().mainFrame()
else:
print('child-frame')
print('URL: %s' % frame.baseUrl().toString())
print('METADATA: %s' % frame.metaData())
print('TAG: %s' % frame.documentElement().tagName())
print('HTML: ' + frame.toHtml())
print()
def handleFrameCreated(self, frame):
frame.loadFinished.connect(lambda: self.save(True, frame=frame))
def main(self):
self.webView = QtWebKit.QWebView()
self.webView.page().frameCreated.connect(self.handleFrameCreated)
self.webView.page().mainFrame().loadFinished.connect(self.save)
self.webView.load(QtCore.QUrl("http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_iframe_scrolling"))
signal.signal(signal.SIGINT, signal.SIG_DFL)
print('Press Crtl+C to quit\n')
app = QtGui.QApplication(sys.argv)
s = Sp()
s.main()
sys.exit(app.exec_())
此代码依赖于创建QApplication的实例并相应地退出它
这个问题是必须在主线程中创建和退出QApplication
我无法访问我正在开发的项目中的主线程
是否有可能以某种方式避免错误“QApplication未在main()线程中创建”?
也许通过重写代码使其在没有QApplication的情况下工作或以某种方式使QApplication在没有主线程的情况下工作?
编辑:如果主线程没有干预其代码执行流程,我可以编辑主线程,例如app = QtGui.QApplication([])
不会停止流程但是在另一个线程中的某些代码完成之前挂起的函数将被视为不适用。