I think the code speaks for itself
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:
A minor thing to note is that you should ensure you re-add your object to the window every time the javaScriptWindowObjectCleared() signal is emitted too. There's a C++ example of this on my blog post http://www.kdedevelopers.org/node/4008
ReplyDeleteWow! I've been looking for a way to do this for a week straight! This is miles ahead of anything I was able to find for Python-Gobject. And it's from 2010, good lord...
ReplyDeleteAll the day with "Python-Gobject" search too, reading c++ code, and here is! clear and well commented code! Thank you!!!
ReplyDeleteYou're welcome! Glad I can help
ReplyDeleteIs there anyway to connect with an onItemClick in a loaded .js file? It seems not to work when the code is loaded from a .js on disk.
ReplyDeleteSorry, don't know. Haven't been playing anymore with this in years.
ReplyDeleteThanks a lot!!
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDeleteThis comment has been removed by a blog administrator.
ReplyDelete