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
相关产品推荐
相关产品推荐

