从Python干净地调用Webkit Javascript函数

从Python干净地调用Webkit Javascript函数,javascript,python,qt,webkit,pyqt,Javascript,Python,Qt,Webkit,Pyqt,对于我目前正在开发的一个应用程序,我决定使用HTML5作为界面,这样我就可以拥有一个现代的界面,当你改变操作系统时,它的外观不会改变。当然,我选择webkit引擎进行渲染,特别是PyQT绑定。我的问题是,每次我想从python调用javascript函数时,都必须使用凌乱的evaluateJavaScript函数 我可以使用任何其他方法来更直接地调用javascript函数吗?PyQt没有任何使事情更简单的包装器 如果你不想写得十全十美,你可以自己写,但要写得好一点。例如,类似这样的内容(只是一

对于我目前正在开发的一个应用程序,我决定使用HTML5作为界面,这样我就可以拥有一个现代的界面,当你改变操作系统时,它的外观不会改变。当然,我选择webkit引擎进行渲染,特别是PyQT绑定。我的问题是,每次我想从python调用javascript函数时,都必须使用凌乱的evaluateJavaScript函数


我可以使用任何其他方法来更直接地调用javascript函数吗?

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])