从PyQt5中的javascript调用python协同例程

时间:2015-09-23 12:33:59

标签: javascript python asynchronous pyqt

我有一个非常复杂的循环,这取决于网络和外围设备之类的东西,我想让它异步。

def Foo(QObject):
    @pyqtSlot(int)
    def complexloop(self):
        do_something_complex

    @pyqtSlot(int, result=int)
    def something_simple(self):
        return "something easy"

这个类被添加到PyQt5中的webkit窗口中,如下所示:

class Window(QWidget):
def __init__(self):
    super(Window, self).__init__()
    self.view = QWebView(self)

    self.foo = Foo(self)
    self.view.page().mainFrame().addToJavaScriptWindowObject("foo", self.foo)

这样,在JavaScript中,我可以调用foo.complexloop()来启动该过程。

问题在于,当我这样做时,整个浏览器会冻结,直到循环完成。我需要一种在后台运行此循环的方法。

我已尝试使用complexloop定义async def,但我找不到有关如何从JavaScript调用它的任何文档。

我试图将调用包装成:

def call_loop(self):
    try:
        self.complex_loop.send(None)
    except StopIteration:
        pass

但这并没有帮助,因为对foo.call_loop()的调用会阻止该窗口。

0 个答案:

没有答案