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])
正如你所看到的,它仍然有点笨拙——你必须手动创建对象代理,而且除了调用对象上的方法之外,没有办法调用自由函数或声明变量或其他任何东西。其中一些是可以实现的,但你能走多远是有限度的。(当然,您总是可以回到显式字符串。)