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

时间:2018-04-24 15:22:47

标签: python-3.x qt pyqt5 pyside2

当我首先运行python-pyside2项目服务器时,它运行良好 该网站也运行良好,但如果我按F5 btn刷新浏览器 站点在/

显示错误页面运行时

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

下面,使用pyside2 scaping代码:

我不知道如何解决它? 最好的问候。
谢谢。

2 个答案:

答案 0 :(得分:3)

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

在您的主要功能中写下这个内容:

if not QtWidgets.QApplication.instance():
    app = QtWidgets.QApplication(sys.argv)
else:
    app = QtWidgets.QApplication.instance()

答案 1 :(得分:0)

对于我的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()

它是基于stack overflow : unit-and-functional-testing-a-pyside-based-application