QWebView в PyQt4 не открывается, когда я помещаю его в функцию

Я пробую что-то базовое с QWebView в PyQt4. Я хочу просто загрузить URL. Странно то, что когда я помещаю QWebView в вызов функции, он не работает, но когда он встроен, он работает.

Итак, следующий код работает так, как ожидалось:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    web = QWebView()
    web.load(QUrl('http://www.google.com'))
    web.setFixedSize(500, 500)
    web.show()
    sys.exit(app.exec_())

Однако когда я перемещаю код QWebView в функцию, как показано ниже, веб-представление никогда не открывается. Вместо этого приложение просто зависает.

def openPage():
    web = QWebView()
    web.load(QUrl('http://www.google.com'))
    web.setFixedSize(500, 500)
    web.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    openPage()
    sys.exit(app.exec_())

Что здесь происходит? Кажется, это не имеет смысла.


person Sam Lee    schedule 12.11.2013    source источник


Ответы (1)


В openPage вы привязываете объект веб-представления к локальной переменной web. Веб-представление автоматически уничтожается, когда переменная выходит за пределы области видимости (когда функция возвращается). Вам нужно сохранить ссылку на представление, возможно, return вот так:

def openPage():
    web = QWebView()
    web.load(QUrl('http://www.google.com'))
    web.setFixedSize(500, 500)
    web.show()
    return web

if __name__ == '__main__':
    app = QApplication(sys.argv)
    web = openPage()
    sys.exit(app.exec_())
person Janne Karila    schedule 12.11.2013