0

現在取り組んでいるアプリケーションでは、インターフェイスにHTML5を使用することにしました。これにより、オペレーティングシステムを変更しても外観が変わらない最新のインターフェイスを使用できるようになりました。当然、レンダリングにはWebkitエンジン、特にPyQTバインディングを選択しました。私の問題は、Pythonからjavascript関数を呼び出すたびに、厄介なevaluateJavaScript関数を使用して呼び出す必要があることです。

javascript関数を呼び出すより直接的な方法を可能にする私が使用できる代替手段はありますか?

4

1 に答える 1

0

PyQt には、作業を容易にするラッパーはありません。

必要に応じて、独自のものを作成できます。完全ではありませんが、もう少し優れています。たとえば、次のようなもの (実際のコードではなく、単なるスケルトン):

class JSObject(object):
    def __init__(self, name):
        self.name = name
    def __getattr__(self, attr):
        class Proxy(object):
            def __init__(self, objname, funcname):
                self.name = '%s.%s' % (objname, funcname)
            def __call__(self, *args):
                argstr = ', '.join(json.dumps(arg) for arg in args)
                retstr = evaluateJavaScript('%s(%s)' % (self.name, argstr)
                # realistically you may want to do more to parse the return
                # value—e.g., look up/create JSONObjects as needed?
                return json.loads(retstr)
        return Proxy(self, attr)

thingIWantToCall = JSObject('thingIWantToCall')
print thingIWantToCall.methodIWantToCallOnIt('foo', [1, 2, 3])

ご覧のとおり、まだ少しぎこちなく、オブジェクト プロキシを手動で作成する必要があり、オブジェクトのメソッドを呼び出す以外に、フリー関数を呼び出したり、変数や何かを宣言したりする方法はありません。そのうちのいくつかは実装できますが、実行できる範囲には制限があります。(もちろん、いつでも明示的な文字列にフォールバックできます。)

于 2012-09-29T04:38:03.497 に答える