当前位置:  开发笔记 > 编程语言 > 正文

从javascript返回值到pyqt5

如何解决《从javascript返回值到pyqt5》经验,为你挑选了1个好方法。

我正在尝试从PyQt5应用程序内部加载和查询JS地图窗口小部件.我可以使用这个方法:

PyQt5.QtWebEngineWidgets.QWebEngineView().page().runJavaScript()

从加载的网页执行JS函数QWebEngineView()但是我在理解如何将一个由JS函数返回的值存储回python方面遇到了麻烦.

这里有一个完整的例子:

下面的PyQt5代码在PyQt4主窗口中加载一个pyqtwebtest.html带有leaflet.js地图窗口小部件的html page(),并添加一个按钮来执行JS代码,目的是将返回的值存储在python变量中...

#!/usr/local/bin/python36
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.form_widget = FormWidget(self)
        _widget = QWidget()
        _layout = QVBoxLayout(_widget)
        _layout.addWidget(self.form_widget)
        self.setCentralWidget(_widget)


class FormWidget(QWidget):
    def __init__(self, parent):
        super(FormWidget, self).__init__(parent)
        self.__controls()
        self.__layout()

    def __controls(self):
        self.browser = QWebEngineView()
        self.browser.load(QUrl('file:///Users/epi/pyqtwebtest.html'))

    def __layout(self):
        self.vbox = QVBoxLayout()
        self.hBox = QVBoxLayout()
        self.getboundsbutton = QPushButton()
        self.hBox.addWidget(self.browser)
        self.hBox.addWidget(self.getboundsbutton)
        self.vbox.addLayout(self.hBox)
        self.setLayout(self.vbox)

        self.getboundsbutton.clicked.connect(self.getBounds)

    def getBounds(self):
        self.bounds = self.browser.page().runJavaScript("[map.getBounds().getSouthWest().lat, map.getBounds().getSouthWest().lng, map.getBounds().getNorthEast().lat, map.getBounds().getNorthEast().lng]")
        print(self.bounds)
        # this is where I get stuck .. the result is None
        # the same js code in the html file prints the bounds values
        # that I want to store on the python side of the app


def main():
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    app.exec_()


if __name__ == '__main__':
    sys.exit(main())

加载以下html页面:




    PyQtLeaflet
    
    
    
    




















    
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有