source:http://pysnippet.blogspot.com/2010/01/calling-python-from-javascript-in-pyqts.html
QtWebKit makes it very easy to expose methods and properties implemented in Python to JavaScript. Qt will automatically expose Qt-slots and Qt-properties to a JavaScript when a QObject is made available in the frame’s JavaScript context.
I think the code speaks for itself
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import sys from PyQt4 import QtCore, QtGui, QtWebKit """Html snippet.""" html = """ <html><body> <center> <script language="JavaScript"> document.write('<p>Python ' + pyObj.pyVersion + '</p>') </script> <button onClick="pyObj.showMessage('Hello from WebKit')">Press me</button> </center> </body></html> """ class StupidClass(QtCore.QObject): """Simple class with one slot and one read-only property.""" @QtCore.pyqtSlot(str) def showMessage(self, msg): """Open a message box and display the specified message.""" QtGui.QMessageBox.information(None, "Info", msg) def _pyVersion(self): """Return the Python version.""" return sys.version """Python interpreter version property.""" pyVersion = QtCore.pyqtProperty(str, fget=_pyVersion) def main(): app = QtGui.QApplication(sys.argv) myObj = StupidClass() webView = QtWebKit.QWebView() # Make myObj exposed as JavaScript object named 'pyObj' webView.page().mainFrame().addToJavaScriptWindowObject("pyObj", myObj) webView.setHtml(html) window = QtGui.QMainWindow() window.setCentralWidget(webView) window.show() sys.exit(app.exec_()) if __name__ == "__main__": main() |
Some references: