QtWebKit.QWebView を使ったPython、JavaScript連携
前々回、WebViewでのC#、JavaSCript間の連携の話題、そして前回IronPythonを使ったWebページの話題という流れて、どうしてもテストしておきたかったのが、Qtを使ったWebViewのPython、JavaScript間相互呼び出しです。
Qtは、LinuxZaurusの開発で経験がありますが(組み込みLinux用なのでQtopiaと呼ばれていましたが)、C++でクロスプラットフォームのGUIアプリケーションを開発できます。歴史は古いのですが、まだまだ現役のようです。最近また触れる機会があり、いろいろと調べてみたところ、WebKitを使ったプログラムが面白そうだということで、ちょっとはまっています。PySideというライブリを使って、Pythonからダイレクトに操作できる点も魅力です。
次の例は、起動するとPythonのプログラムからJavaScript関数を呼び出し、表示されたボタンをクリックすると、Python関数を呼び出すというものです。これはコンソールにメッセージを出力します。
環境: Python 2.7.3 + PySide 1.1.2 / Windows7
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 | import sys from PySide import QtWebKit,QtGui,QtCore html = """ <html> <script> function pyMsg(str){ pyObj.console(str); } function jsFunc(str){ alert(str); } </script> <body> <input type="button" value="btn" onClick="pyMsg('js String')"> </body> </html> """ class jsTest(QtCore.QObject): def __init__( self , parent = None ): super (jsTest, self ).__init__(parent) @QtCore .Slot( str ) def console( self , msg): print msg app = QtGui.QApplication(sys.argv) view = QtWebKit.QWebView() frame = view.page().mainFrame() js = jsTest() view.setHtml(html) frame.addToJavaScriptWindowObject( 'pyObj' , js) frame.evaluateJavaScript( "jsFunc('from py Function');" ) view.show() sys.exit(app.exec_()) |
他にも、クリックイベント等をフックできるので、デバッグやその他いろいろと楽しいことができます。
自分ブラウザみたいなものを作ってみたくなりますね。