Python/PyQt при повторном открытии QWebView показывает пустую страницу

У меня есть проблема с тем, что QWebView ничего не показывает после повторного запуска QAplication. Этот небольшой фрагмент отображает проблему:

import sys
from PyQt4 import QtGui, QtWebKit, QtCore

app = QtGui.QApplication(sys.argv)
while True:
    browser = QtWebKit.QWebView()
    browser.setUrl(QtCore.QUrl('https://www.google.ca/#q=pyqt'))
    browser.show()
    app.exec_()

При запуске отображается страница поиска Google для pyqt, но как только я закрываю виджет, следующая появляется как пустая вместо той же страницы поиска. Мне было интересно, что я делаю неправильно здесь?


person etsinko    schedule 30.01.2015    source источник
comment
Один из вопросов заключается в том, почему вам нужно вызывать app.exec_() несколько раз. Смотрите ответ.   -  person Trilarion    schedule 02.02.2015


Ответы (1)


Я не знаю, почему страница остается пустой, но я уверен, что вы можете легко добиться той же функциональности, не вызывая QApplication.exec_() несколько раз.

Пример достижения того же:

from PySide import QtGui, QtCore, QtWebKit

class MyBrowser(QtWebKit.QWebView):

    closing = QtCore.Signal()

    def __init__(self):
        super().__init__()

    def closeEvent(self, event):
        self.closing.emit()

class MyApp(QtCore.QObject):

    def __init__(self):
        super().__init__()

    def setup(self):
        self.browser = MyBrowser()
        self.browser.closing.connect(self.setup)
        self.browser.setUrl(QtCore.QUrl('https://www.google.ca/#q=pyqt'))
        self.browser.show()


app = QtGui.QApplication([])
a = MyApp()
a.setup()
app.exec_()
person Trilarion    schedule 02.02.2015
comment
Спасибо за ответ! Я вызываю app.exec_() в цикле, потому что в реальном приложении у меня есть вызов окна входа в систему exec_(), а затем, в зависимости от пользователя, я создаю QMainWindow со всеми пользовательскими элементами пользовательского интерфейса. Когда пользователь закрывает свое окно, отображается новый диалог входа в систему. - person etsinko; 02.02.2015
comment
@etsinko Но вам действительно нужно вызывать app.exec_() более одного раза или есть другой способ? - person Trilarion; 02.02.2015
comment
Вероятно, я смогу найти способ избежать повторного вызова app.exec_(). Однако это потребует изменения текущей кодовой базы. Мне действительно интересно, почему последовательные вызовы app.exec_() влияют на рендеринг веб-страницы. - person etsinko; 02.02.2015