2011-05-04 17 views
7

Estoy tratando de interactuar con un mapa de google usando python. Creé una aplicación en PyQT con QWebView. El QWebView carga una página local HTML, como se muestra aquí:Cómo llamar a la función de JavaScript desde PyQT

browser = QwebView() 
browser.load(QUrl("file:///c:/main.html")) 
frame = browser.page().currentFrame() 
frame.evaluateJavaScript(QString("addMarker(-33.89, 151.275)")) 

la página HTML es el siguiente:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<style type="text/css"> 
    html { height: 100% } 
    body { height: 100%; margin: 0px; padding: 0px } 
    #map_canvas { height: 100% } 
</style> 
<script type="text/javascript" 
    src="http://maps.google.com/maps/api/js?sensor=false"> 
</script> 
<script type="text/javascript"> 
var map; 
function initialize() { 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
        zoom: 8, 
        center: latlng, 
        mapTypeId: google.maps.MapTypeId.ROADMAP 
        }; 
    map = new google.maps.Map(document.getElementById("map_canvas"), 
           myOptions); 
} 

function addMarker(lat, lng) { 
    var myLatLng = new google.maps.LatLng(lat, lng); 
     var beachMarker = new google.maps.Marker({position: myLatLng, 
               map: map 
               }); 
} 

</script> 
</head> 
<body onload="initialize();"> 
    <div id="map_canvas" style="width:100%; height:100%"></div> 
</body> 
</html> 

¿Cómo puedo llamar addMarker desde Python?

He intentado llamar a addMarker desde el HTML (agregué la llamada a la llamada onload) y traté de usar una expresión javascript simple de la python (frame.evaluateJavaScript("alert(5)")). Ambos funcionaron, así que sé que addMarker y evaluateJavaScript pueden funcionar, simplemente no sé cómo.

También intenté llamar a evaluateJavaScript("addMarker(-33.89,151.275)") en el objeto frame.documentElement() y eso tampoco funcionó.

Respuesta

3

El error fue que necesitaba esperar a que la página se cargara. Agregué un botón que estaba conectado a la llamada evaluateJavaScript("addMarker(-33.89,151.275)"). Cuando hice clic en el botón (después de la página cargada), el marcador se agregó como se esperaba.

2

http://pysnippet.blogspot.com/2010/01/more-fun-with-qwebkit.html podría ayudar.

La única diferencia que puedo ver entre las dos cosas que probó es que la alerta() es parte de las funciones estándar. Tal vez necesita un document.addmarker() en lugar de simplemente addmarker()?

+0

El error fue que necesitaba esperar a que la página se cargara. Agregué un botón que estaba conectado a la llamada 'evaluateJavaScript (" addMarker (-33.89,151.275) ")'. Cuando hice clic en el botón (después de la página cargada), el marcador se agregó como se esperaba. – Dan

+0

Debe agregar eso como respuesta a su pregunta y luego aceptarlo. –

Cuestiones relacionadas