2011-05-04 5 views
7

파이썬을 사용하여 Google지도와 상호 작용하려고합니다. QWebView로 PyQT에 응용 프로그램을 만들었습니다.PyQT에서 javascript 함수를 호출하는 방법

<!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> 

어떻게 파이썬에서 addMarker를 호출 할 수 있습니다 : 다음과 같이

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

HTML 페이지는 다음과 같습니다 여기에 같이 QWebView 로컬 HTML 페이지를로드?

HTML에서 addMarker를 호출 해 보았습니다. (onload 호출에 대한 호출을 추가했습니다.) 파이썬 (frame.evaluateJavaScript("alert(5)"))에서 간단한 자바 스크립트 표현식을 사용해 보았습니다. 둘 다 작동하므로, 나는 과 evaluateJavaScript이 작동한다는 것을 알기 때문에, 어떻게해야할지 모릅니다.

또한 frame.documentElement() 개체에서 evaluateJavaScript("addMarker(-33.89,151.275)")을 호출하려고 시도했지만 작동하지 않았습니다.

답변

3

오류는 페이지가로드 될 때까지 기다려야한다는 오류였습니다. evaluateJavaScript("addMarker(-33.89,151.275)") 호출에 연결된 버튼을 추가했습니다. 페이지가로드 된 후 버튼을 클릭하면 마커가 예상대로 추가되었습니다.

2

http://pysnippet.blogspot.com/2010/01/more-fun-with-qwebkit.html 도움이 될 수 있습니다.

당신이 시도한 두 가지 유일한 차이점은 alert()이 표준 함수의 일부라는 점입니다. 어쩌면 addmarker() 대신 document.addmarker()가 필요합니까?

+0

오류는 페이지가로드 될 때까지 기다릴 필요가 있다는 것입니다. 나는'evaluateJavaScript ("addMarker (-33.89,151.275)")'호출에 연결된 버튼을 추가했다. 페이지가로드 된 후 버튼을 클릭하면 마커가 예상대로 추가되었습니다. – Dan

+0

질문에 대한 답변으로 추가하고 동의해야합니다. –

관련 문제