You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt6 QMainWindow中QWebEngineView白框及窗口重启问题求助

解决QMainWindow上无用QWebEngineView白框及移除后窗口重启问题

移除主窗口上的白框

你在Main类的__init__方法中直接创建了QtWebEngineWidgets.QWebEngineView(self),这个视图没有被添加到任何布局中,会默认以独立控件的形式显示在窗口左上角,就是你看到的右键带上下文菜单的白框。直接删除这行代码就能移除白框。

解决移除后首次添加标签页的窗口重启问题

删除上述代码后,首次点击"Add Tab"创建QWebEngineView时窗口重启,是因为QtWebEngine第一次初始化Chromium引擎时会触发应用重启(这是QtWebEngine的固有初始化逻辑)。要解决这个问题,只需在应用启动阶段提前完成引擎初始化:

  • 在创建主窗口实例之前,先创建一个临时的QWebEngineView实例并立即销毁,让Chromium引擎在应用启动初期就完成初始化,后续创建实例时就不会再触发重启。

修改后的完整代码

from PyQt6.QtWidgets import *
from PyQt6 import QtGui, QtCore, QtWebEngineWidgets
import sys


class Main(QMainWindow):
    def __init__(self):
        super().__init__()

        # --------------
        # central widget
        # --------------
        self.layout = QGridLayout()
        container   = QWidget()
        container.setLayout(self.layout)
        self.setCentralWidget(container)

        # -----------------------
        # push button to add tabs
        # -----------------------
        btn = QPushButton('Add Tab')
        btn.released.connect(self.addTab)
        self.layout.addWidget(btn)

        # ----------
        # tab widget
        # ----------
        self.tabCount = 0
        self.tabs = QTabWidget()
        self.tabs.setTabsClosable(True)
        self.layout.addWidget(self.tabs)

    def addTab(self):
        # -------------
        # main elements
        # -------------
        layout = QVBoxLayout()
        container = QWidget()
        container.setLayout(layout)

        # ---------
        # add label
        # ---------
        tabBrowser = QtWebEngineWidgets.QWebEngineView(self)
        txt = '''
        <html>
        Hello World!
        </html>
        '''
        tabBrowser.setHtml(txt)
        layout.addWidget(tabBrowser)

        # -------
        # add tab
        # -------
        self.tabs.addTab(container, str(self.tabCount))
        self.tabCount += 1


if __name__ == '__main__':

    # -----------------
    # exception handler
    # -----------------
    def exception_hook(exc_type, exc_value, tb):
        sys.__excepthook__(exc_type, exc_value, tb)
        main.close()
        sys.exit(1)
    sys.excepthook = exception_hook

    # -----------
    # run program
    # -----------
    app = QApplication(sys.argv)
    
    # 提前初始化QtWebEngine,避免首次创建实例时窗口重启
    temp_webview = QtWebEngineWidgets.QWebEngineView()
    del temp_webview

    main = Main()
    main.show()
    sys.exit(app.exec())

说明

  • 删除了主窗口中无用的QtWebEngineWidgets.QWebEngineView(self)代码,彻底移除了白框。
  • 在应用启动时创建临时QWebEngineView实例,提前完成Chromium引擎初始化,解决了首次添加标签页时的窗口重启问题。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:30:52