使用PyQt5在while循环后重新启动Python Shell

时间:2019-07-17 23:40:22

标签: python python-3.x pyqt pyqt5

实际上,我尝试做一个html页面的显示器。我有一些需要显示的html列表,每个页面必须在x秒内保持可见。 但是,在显示第一页之后,应用程序崩溃并且python shell随后重新启动。

在我看来,我将创建一个显示页面并关闭应用程序的窗口,因为在尝试显示png / jpg之后,我需要关闭应用程序以将Pygame用于图片并重新构建该应用程序才能显示html页面之后。 我的清单正在寻找它: html页面/ html页面/图片/ html页面/图片/图片

因此,我建立了一个示例代码,以便在显示器中加入一个测试代码:

from PyQt5 import QtWidgets, QtWebEngineWidgets, QtCore
import sys

continuer = True
while continuer:
    print("Application created")
    # Create application
    app = QtWidgets.QApplication(sys.argv)

    # Add window       
    win = QtWidgets.QWidget()
    win.setWindowTitle('My first rendering')

    # Add layout
    layout = QtWidgets.QVBoxLayout()
    win.setLayout(layout)

    # Create QWebView
    view = QtWebEngineWidgets.QWebEngineView()

    view.setUrl(QtCore.QUrl('https://google.com'))

    # Add QWebView to the layout
    layout.addWidget(view)

    # Show window, run app
    win.show()

    QtCore.QTimer.singleShot(7*1000, win.close)
    QtCore.QTimer.singleShot(7*1000, app.quit)
    print("View displayed")

    # While loop
    app.exec_()
    print('Close Application')

print("End While Loop")

执行后的结果

可能是app var中的sys.argv错误,但是我是Python新手,所以我不知道如何解决该问题。

1 个答案:

答案 0 :(得分:1)

问题在于不一定要消除QApplication,因此您将创建多个Qt禁止的QApplication,更好的解决方案是重新考虑它,以验证它是否不存在然后创建一个新的:

import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets

continuer = True
while continuer:
    print("Application created")
    # Create application
    app = QtWidgets.QApplication.instance()
    if app is None:
        app = QtWidgets.QApplication(sys.argv)
    # Add window
    win = QtWidgets.QWidget()
    win.setWindowTitle("My first rendering")
    # Create QWebEngineView
    view = QtWebEngineWidgets.QWebEngineView()
    view.setUrl(QtCore.QUrl("https://google.com"))
    # Add layout
    layout = QtWidgets.QVBoxLayout(win)
    win.setLayout(layout)
    # Add QWebView to the layout
    layout.addWidget(view)
    # Show window, run app
    win.show()
    QtCore.QTimer.singleShot(7 * 1000, win.close)
    QtCore.QTimer.singleShot(7 * 1000, app.quit)
    print("View displayed")
    # While loop
    app.exec_()
    print("Close Application")

print("End While Loop")