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

如何在PyQt5的QWebEngineView中通过HTML按钮关闭应用程序

要实现JS点击按钮关闭Python应用,你需要用QWebChannel建立JavaScript和Python的通信桥接,总共只需要修改两处代码即可实现需求:

1. 修改Python代码

首先引入QWebChannel依赖,自定义桥接类暴露可被JS调用的关闭方法,将桥接对象注册到Web视图的通道中:

import sys
import os
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtWebChannel import QWebChannel

# 自定义桥接类,所有需要暴露给JS调用的方法都写在这里
class PyBridge(QObject):
    @pyqtSlot()
    def exit_app(self):
        # 关闭主窗口
        self.parent().close()

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.browser = QWebEngineView()
        
        # 初始化Web通道
        self.channel = QWebChannel()
        self.bridge = PyBridge(parent=self)
        # 注册桥接对象,对象名"pyBridge"需要和JS侧对应
        self.channel.registerObject("pyBridge", self.bridge)
        self.browser.page().setWebChannel(self.channel)

        config_name = 'data_files/init.html'
        if getattr(sys, 'frozen', False):
            application_path = os.path.dirname(sys.executable)
        elif __file__:
            application_path = os.path.dirname(__file__)
        config_path = os.path.join(application_path, config_name)
        self.browser.load(QUrl().fromLocalFile(config_path))
        self.setCentralWidget(self.browser)
        self.showMaximized()


app = QApplication(sys.argv)
QApplication.setApplicationName('v0.1')
window = MainWindow()
app.exec_()
2. 修改HTML代码

先引入Qt提供的qwebchannel.js工具,在退出方法中通过通道调用Python侧暴露的exit_app方法即可:

<button onclick="exitApplication()">Exit</button>

<!-- 引入Qt自带的WebChannel工具,也可以将这个文件存到本地后引用本地路径 -->
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>
    function exitApplication() {
        new QWebChannel(qt.webChannelTransport, function(channel) {
            // 调用Python侧注册的pyBridge对象的exit_app方法
            channel.objects.pyBridge.exit_app();
        });
    }
</script>

注意事项

如果打包后运行找不到qwebchannel.js,可以到你本地Python安装路径的site-packages/PyQt5/Qt5/resources目录下找到该文件,复制到你的HTML同级目录,将引入路径改为本地相对路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:18:03