2011-06-22 9 views
10

Estoy planeando usar PyQt para controlar un navegador WebKit incorporado en el lado del servidor.PyQt (PySide), WebKit y métodos de exposición de/a Javascript

Tengo una lógica de aplicación heredada en Javascript en la página HTML que se ejecuta dentro de WebKit.

¿Cómo podría comunicarse desde el proceso de host (Python, PyQt) con Javascript, por lo que

  • me puede llamar a las funciones de Javascript dentro de la página

  • métodos de Python están expuestos a Javascript y puede ser llamado desde el Javascript, con argumentos

Respuesta

26

el siguiente código debería ser útiles:

import sys 
from PyQt4.QtCore import QObject, pyqtSlot 
from PyQt4.QtGui import QApplication 
from PyQt4.QtWebKit import QWebView 

html = """ 
<html> 
<body> 
    <h1>Hello!</h1><br> 
    <h2><a href="#" onclick="printer.text('Message from QWebView')">QObject Test</a></h2> 
    <h2><a href="#" onclick="alert('Javascript works!')">JS test</a></h2> 
</body> 
</html> 
""" 

class ConsolePrinter(QObject): 
    def __init__(self, parent=None): 
     super(ConsolePrinter, self).__init__(parent) 

    @pyqtSlot(str) 
    def text(self, message): 
     print message 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    view = QWebView() 
    frame = view.page().mainFrame() 
    printer = ConsolePrinter() 
    view.setHtml(html) 
    frame.addToJavaScriptWindowObject('printer', printer) 
    frame.evaluateJavaScript("alert('Hello');") 
    frame.evaluateJavaScript("printer.text('Goooooooooo!');") 
    view.show() 
    app.exec_() 
+1

Perfecto! Gracias. –

+3

Este ejemplo usando PySide: https://gist.github.com/2203822 – webwurst

Cuestiones relacionadas