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

