10

When i run python-pyside2 project server first, then it works well.
And the site also work well, but if i press F5 btn to refresh in browser.
Site shows error page 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

Below, scaping code using pyside2:

I don't know how can i fix it?
Best regards.
Thanks.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Jayson Reyes
  • 133
  • 1
  • 2
  • 9
  • I noticed that when i'm visiting site, the another person also can't visit this site with same error. – Jayson Reyes Apr 24 '18 at 16:31
  • Possible duplicate of [PySide2 not closing correctly with basic example](https://stackoverflow.com/questions/54281439/pyside2-not-closing-correctly-with-basic-example) – Krzysztof Sakowski Feb 14 '19 at 14:27

2 Answers2

13

Check if already an instance of QApplication is present or not as the error occurs when an instance is already running and you are trying to create a new one.

Write this in your main function:

if not QtWidgets.QApplication.instance():
    app = QtWidgets.QApplication(sys.argv)
else:
    app = QtWidgets.QApplication.instance()
Prachi Poddar
  • 131
  • 1
  • 2
2

For my pyside2 unit test the following worked fairly well

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()

it was loosely based on stack overflow : unit-and-functional-testing-a-pyside-based-application

Strohan
  • 31
  • 2