QtWebKit QApplication 调用两次

发布于 2024-11-16 14:47:50 字数 657 浏览 3 评论 0原文

我从 Flask 调用一个抓取类,第二次实例化一个新的 Webkit() 类 (QApplication) 时,它退出我的 Flask 应用程序。

如何多次重新运行 Qt GUI 应用程序并将其包含在内,以便它不会关闭“外部”应用程序?

进一步说明,Qt 是事件驱动,调用 QApplication.quit() 不仅会关闭事件循环,还会关闭 Python。不调用 quit() 但永远不会继续执行其余代码。

class Webkit():
...
def __run(self, url, method, dict=None):
    self.qapp = QApplication(sys.argv) # FAIL here the 2nd time round

    req = QNetworkRequest()
    req.setUrl(QUrl(url))

    self.qweb = QWebView()
    self.qweb.setPage(self.Page())
    self.qweb.loadFinished.connect(self.finished_loading)

    self.qweb.load(req)
    self.qapp.exec_()

def finished_loading(self):
    self.qapp.quit()

I am calling a scraping class from Flask and the second time I instantiate a new Webkit() class (QApplication), it exits my Flask app.

How can I re-run a Qt GUI app multiple times and have it contained so it does not shut down the "outer" app?

Further clarification, Qt is event drive and calling QApplication.quit() closes not only the event loop but Python as well. Not calling quit() though never continues executing the rest of the code.

class Webkit():
...
def __run(self, url, method, dict=None):
    self.qapp = QApplication(sys.argv) # FAIL here the 2nd time round

    req = QNetworkRequest()
    req.setUrl(QUrl(url))

    self.qweb = QWebView()
    self.qweb.setPage(self.Page())
    self.qweb.loadFinished.connect(self.finished_loading)

    self.qweb.load(req)
    self.qapp.exec_()

def finished_loading(self):
    self.qapp.quit()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

分開簡單 2024-11-23 14:47:51

到目前为止,对我来说唯一的(hacky!)解决方案是将其添加到 WebKit() 类中:

if __name__ == '__main__':
    ....

然后使用以下内容解析 Flask 应用程序的结果:

return os.popen('python webkit.py').read()

The only (hacky!) solution so far is for me is to add this to the WebKit() class:

if __name__ == '__main__':
    ....

and then parse the result from the Flask app with this:

return os.popen('python webkit.py').read()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文