2011-06-22 9 views
10

Mam zamiar użyć PyQt do kontrolowania wbudowanej przeglądarki WebKit po stronie serwera.PyQt (PySide), WebKit i metody prezentacji od/do Javascript

Mam pewne dziedziczenie logiki aplikacji w JavaScript na stronie HTML działającej w WebKit.

Jak mogę komunikować się z procesu hosta (Python, pyqt) z Javascript, tak że

  • mogę wywołać funkcje Javascript wewnątrz strony

  • metody Python są narażone na JavaScript i może być wywoływana z JavaScript, z argumentami

Odpowiedz

26

Poniższy kod źródłowy powinien być pomocne:

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

Idealnie! Dzięki. –

+3

Ten przykład używa PySide: https://gist.github.com/2203822 – webwurst

Powiązane problemy