这方面资料不多,不懂html,不懂js,略懂python的我,稍微看了点html和js,好几天的摸索,终于测试成功了。

PYQT+HTML利用PYQT的webview调用JS内方法

1.python调用js需要使用webView.page().mainFrame().evaluateJavaScript()这个方法

2.这个方法需要制作信号和槽才能触发。

功能:python调用html内的js定位函数。实现在webview内显示定位

测试代码mainUI.py

  1. # -*- coding: utf-8 -*-
  2. # 作者:神秘藏宝室
  3. from Ui_mainUI import Ui_Dialog
  4. #添加
  5. from PyQt4.QtCore import *
  6. from PyQt4.QtGui import *
  7. class MyBrowser(QDialog, Ui_Dialog):
  8. """
  9. Class documentation goes here.
  10. """
  11. def __init__(self, parent=None):
  12. """
  13. Constructor
  14. @param parent reference to the parent widget
  15. @type QWidget
  16. """
  17. QDialog.__init__(self, parent)
  18. self.setupUi(self)
  19. htmlfile = "gpsPoint.html"
  20. url = QUrl(htmlfile)
  21. self.webView.load(url)
  22. self.webView.loadFinished.connect(self._plot)
  23. print u"html载入"
  24. # self.createConnection()
  25. # def createConnection(self):
  26. # # self.connect(self.pushButtonGo,SIGNAL("clicked"),self.on_pushButtonGo_clicked)
  27. # self.pushButtonGo.clicked.connect(self.on_pushButtonGo_clicked)
  28. @pyqtSlot(result="QString")
  29. def _plot(self):
  30. self.webView.page().mainFrame().evaluateJavaScript('theNewLocation(112.424483,34.640631);')
  31. @pyqtSignature("")
  32. def on_lineEditAddress_returnPressed(self):
  33. """
  34. Slot documentation goes here.
  35. """
  36. self.search()
  37. @pyqtSignature("")
  38. def on_pushButtonGo_clicked(self):
  39. """
  40. Slot documentation goes here.
  41. """
  42. self.search()
  43. def search(self):
  44. address = str(self.lineEditAddress.text())
  45. if address:
  46. if address.find('://') == -1:
  47. address = 'http://' + address
  48. self.lineEditAddress.setText(address)
  49. url = QUrl(address)
  50. self.webView.load(url)
  51. if __name__ == "__main__":
  52. import sys
  53. app = QApplication(sys.argv)
  54. mb = MyBrowser()
  55. mb.show()
  56. sys.exit(app.exec_())

gpsPoint.html文件


  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  5. <style type="text/css">
  6. body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
  7. #allmap{height:100%;width:100%;}
  8. #r-result{width:100%; font-size:14px;}
  9. </style>
  10. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=mbGq5Dh8rUKhnzP6VbB0g1izAsyUjGab"></script>
  11. <title>经纬度定位</title>
  12. </head>
  13. <body>
  14. <div id="allmap"></div>
  15. <!--<div id="r-result">-->
  16. <!--经度: <input id="longitude" type="text" style="width:100px; margin-right:10px;" />-->
  17. <!--纬度: <input id="latitude" type="text" style="width:100px; margin-right:10px;" />-->
  18. <!--<input type="button" value="查询" onclick="theLocation()" />-->
  19. <!--</div>-->
  20. </body>
  21. </html>
  22. <script type="text/javascript">
  23. // 百度地图API功能
  24. var map = new BMap.Map("allmap");
  25. map.centerAndZoom(new BMap.Point(112.424483,34.640631), 15);//洛浦公园坐标
  26. map.enableScrollWheelZoom(true);
  27. //新建定位标准
  28. <!--theNewLocation(112.424483,34.640631);-->
  29. // 用经纬度设置地图中心点
  30. function theNewLocation(x,y){
  31. alert('测试');
  32. if(1){
  33. map.clearOverlays();
  34. var new_point = new BMap.Point(x,y);
  35. var marker = new BMap.Marker(new_point); // 创建标注
  36. map.addOverlay(marker); // 将标注添加到地图中
  37. map.panTo(new_point);
  38. //增加定位信息标注
  39. map.centerAndZoom(new_point, 15);
  40. var opts = {
  41. width : 50, // 信息窗口宽度
  42. height: 50, // 信息窗口高度
  43. title : "我的最新位置" , // 信息窗口标题
  44. enableMessage:true,//设置允许信息窗发送短息
  45. message:"我就在这里哦~~~~"
  46. }
  47. var infoWindow = new BMap.InfoWindow("我确实就在这里!!!", opts); // 创建信息窗口对象
  48. marker.addEventListener("click", function(){
  49. map.openInfoWindow(infoWindow,new_point); //开启信息窗口
  50. });
  51. }
  52. }
  53. </script>

python调用html内的js方法的更多相关文章

  1. Python调用C/C++的种种方法

    Python调用C/C++的种种方法 2010-12-07 09:59 28433人阅读 评论(1) 收藏 Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面 ...

  2. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

  3. Python子类调用父类内属性的方法

    常见的就是初始化方法__init__() python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函 ...

  4. JS 互相调用iframe页面中js方法、VUE里 iframe 互调方法

    1,父 html 调用子 iframe 内方法: document.getElementById("iframe").contentWindow.func(data1,data2. ...

  5. 第8.18节 Python类中内置析构方法__del__

    一. 引言 基本上所有支持OOP设计的语言都支持析构方法(也称析构函数),析构方法都是在对象生命周期结束时调用,一般用来实施实例相关生命周期内访问数据的扫尾工作,包括关闭文件.释放内存.输出日志.清理 ...

  6. python 调用shell命令三种方法

    #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将pyth ...

  7. python - 类的内置 attr 方法

    类的内置 attr 方法 #类的内置 attr 方法: # __getattr__ # __setattr__ # __delattr__ # __getattr__ #到调用一个类不存在数参数时,将 ...

  8. 二级域名相同的情况下子页面调用父页面的js方法

    这两天项目遇到这种需求.项目是一个平台级系统,其中嵌入了多款应用.在平台上可以使用这些应用操作业务. 现在产品提出了个需求:即在A应用中需要调用js方法来打开B应用. 处理方法是:平台js中给出个打开 ...

  9. Layer获取iframe的dom元素及调用iframe页的js方法

    1. 父页面点击第一个按钮触发,获取子页面中的body元素,调用子页面中定义的js方法 yes : function(index,layero){ //获取iframe的body元素 var body ...

随机推荐

  1. 使用sklean进行多分类下的二分类

    #coding:utf-8 import matplotlib.pyplot as plt import numpy as np from sklearn.linear_model import Lo ...

  2. 百度UEditor 用require 引入 Thinkphp5 ,图片上传问题

    用require引入,用了10分钟:上传图片,用了一个早上(吐血一地.....) 重点:require引入成功后,在需要引用UEditor的文件开头加入(ue的文件夹路径) window.UEDITO ...

  3. 基于consul构建golang系统分布式服务发现机制

    原文地址-石匠的Blog: http://www.bugclosed.com/post/5 在分布式架构中,服务治理是一个重要的问题.在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进 ...

  4. OC 内存管理-02 autorelease 概念 以及用法

    (1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作 (2) 不管你这个对象时在@autoreleasepool 之内创建的 ...

  5. EasyUI DataGrid 相同连续列合并

    扩展方法:$.extend($.fn.datagrid.methods, { autoMergeCells: function(jq, fields) { return jq.each(functio ...

  6. PNP与NPN三极管

    主要区别是电流流向和电压不同:PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出.PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区 ...

  7. Redis特性和应用场景

    Redis特性 速度快 Redis使用标准C编写实现,而且将所有数据加载到内存中,所以速度非常快.官方提供的数据表明,在一个普通的Linux机器上,Redis读写速度分别达到81000/s和11000 ...

  8. src.rpm包安装方法

    有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译.这类软件包有多种安装方法,以redhat为例说明如下: 注意: 如果没有rpmbuild可以从系统安装光 ...

  9. 使用.NET Reflector 查看Unity引擎里面的DLL文件

    转载标注来源哦! 原地址在这里!在这里. 当你查看unity里面API的时候.是不是有时候追踪了一两步就碰到DLL文件走不下去了呢?非常是不爽吧. 这样的问题我也是常常碰到.这是人家商业引擎不想让你看 ...

  10. C++ 矩阵计算库 :Eigen库

    Eigen http://eigen.tuxfamily.org/index.php?title=Main_Page 下载http://bitbucket.org/eigen/eigen/get/3. ...