RuntimeError: 请在创建新的 QApplication 实例之前销毁 QApplication 单例

Jay*_*yes 5 qt python-3.x pyqt5 pyside2

当我首先运行 python-pyside2 项目服务器时,它运行良好。
而且该站点也运行良好,但是如果我按 F5 btn 在浏览器中刷新。
站点显示错误页面 Runtime at/

import sys

from urllib.request import urlopen  
from bs4 import BeautifulSoup 

from PySide2.QtGui import *  
from PySide2.QtCore import *  
from PySide2.QtWebKitWidgets import *  
from PySide2.QtWidgets import QApplication 

class dynamic_render(QWebPage):

    def __init__(self, url):
        self.frame = None
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self._loadFinished)  
        self.mainFrame().load(QUrl(url))
        QTimer.singleShot(0, self.sendKbdEvent)
        QTimer.singleShot(100, app.quit)
        self.app.exec_()

    def _loadFinished(self, result):  
        self.frame = self.mainFrame()  
        self.app.quit()
        self.app = None
Run Code Online (Sandbox Code Playgroud)

下面,使用 pyside2 转义代码:

我不知道我该如何解决?
此致。
谢谢。

小智 5

检查是否已经存在 QApplication 的实例,因为当实例已经在运行并且您正在尝试创建一个新实例时会发生错误。

在你的主函数中写下这个:

if not QtWidgets.QApplication.instance():
    app = QtWidgets.QApplication(sys.argv)
else:
    app = QtWidgets.QApplication.instance()
Run Code Online (Sandbox Code Playgroud)


小智 2

对于我的 pyside2 单元测试,以下效果相当好

import PySide2
import unittest

class Test_qapplication(unittest.TestCase):

    def setUp(self):
        super(Test_qapplication, self).setUp()
        if isinstance(PySide2.QtGui.qApp, type(None)):
            self.app = PySide2.QtWidgets.QApplication([])
        else:
            self.app = PySide2.QtGui.qApp


    def tearDown(self):
        del self.app
        return super(Test_qapplication, self).tearDown()
Run Code Online (Sandbox Code Playgroud)

它松散地基于堆栈溢出:单元和功能测试a-pyside-based-application