PyQt5的问题-闪退

今天我用PyQt5写了一个程序,代码如下:

from PyQt5.QtWidgets import QAction,QApplication,QToolBar,QMainWindow,QGridLayout
from PyQt5.QtWebEngineWidgets import QWebEngineView

class WebEngineView(QWebEngineView):
    def __init__(self, mainwindow, parent=None):
        super(WebEngineView, self).__init__(parent)
        self.mainwindow = mainwindow
    def createWindow(self, QWebEnginePage_WebWindowType):
        new_webview = WebEngineView(self.mainwindow)
        self.mainwindow.create_tab(new_webview)
        return new_webview

class Main(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("__None__")
        self.View=QWebEngineView(self)
        self.Layout=QGridLayout()
        #self.Layout.setContentsMargins(0, 0, 0, 0)
        self.Layout.addWidget(self.View,0,0);self.Layout.addWidget(QWebEngineView(),0,1)
        self.setLayout(self.Layout)

if __name__ == "__main__":
    App=QApplication([])
    Main().show()
    App.exec_()

跑的时候就闪退了。出来一个窗口,又消失了,程序却还在运行。
这种问题我以前就遇到过了。实在解决不了,提一个问题。
请各位多多指教!


import sys
from PyQt5.QtWidgets import QWidget,QApplication,QMainWindow,QGridLayout
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle('例子')
        self.setGeometry(5,30,1355,730)
        #布局
        self.window=QWidget()
        self.browser=QWebEngineView()
        self.Layout=QGridLayout()
        self.Layout.addWidget(self.browser,0,0)
        self.window.setLayout(self.Layout)
        
        self.browser.load(QUrl('https://www.163.com'))
        self.setCentralWidget(self.browser)
        
if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=MainWindow()
    win.show()
    app.exit(app.exec_())

该回答引用GPTᴼᴾᴱᴺᴬᴵ,具体如下:

这个程序可能是因为没有设置窗口的大小而导致窗口大小为0,从而导致程序窗口出现后立即消失。您可以尝试将 Main 类的 init 方法中设置窗口大小,如下所示:

class Main(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("__None__")
        self.View=QWebEngineView(self)
        self.Layout=QGridLayout()
        self.Layout.addWidget(self.View, 0, 0)
        self.Layout.addWidget(QWebEngineView(), 0, 1)
        widget = QWidget()
        widget.setLayout(self.Layout)
        self.setCentralWidget(widget)
        self.resize(800, 600)  # 设置窗口大小



另外,还有一点需要注意的是,Main 类没有继承自 QWidget,因此不能直接调用 setLayout 方法设置布局。可以通过在 Main 类中创建一个 QWidget 对象,将布局设置给这个 QWidget 对象,然后再将这个 QWidget 对象设置为主窗口的中央窗口。


如果以上回答对您有所帮助,望采纳~谢谢