2015-01-30 9 views
0

У меня есть эта проблема с QWebView, которая ничего не показывает после перезапуска QAplication. Этот небольшой фрагмент код displys проблемы:Python/PyQt повторное открытие QWebView показывает пустую страницу

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 показана, но как только я закрываю виджет, следующий один всплывает как пустой вместо той же страницы поиска. Мне было интересно, что я здесь делаю неправильно?

+0

Один вопрос, почему вам нужно вызвать app.exec_() несколько раз. См. Ответ. – Trilarion

ответ

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_() 
+0

Спасибо за ответ! Я вызываю app.exec_() в цикле, потому что в реальном приложении у меня есть вызов для окна входа в систему exec_(), а затем, в зависимости от пользователя, я создаю QMainWindow со всеми пользовательскими элементами пользовательского интерфейса. Когда пользователь закрывает свое окно, отображается новое диалоговое окно входа в систему. – etsinko

+0

@etsinko Но вам действительно нужно называть app.exec_() более одного раза или есть другой способ? – Trilarion

+0

Возможно, я найду способ избежать повторного вызова приложения.exec_(). Тем не менее, это будет связано с изменением текущей кодовой базы. Мне действительно интересно, почему последовательные вызовы app.exec_() влияют на рендеринг веб-страницы. – etsinko