Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Eel将JavaScript变量值传递给Python_Python_Eel - Fatal编程技术网

使用Eel将JavaScript变量值传递给Python

使用Eel将JavaScript变量值传递给Python,python,eel,Python,Eel,我有一个python程序,它使用eel库构建了一个漂亮的GUI 在GUI中,JS函数中有一个变量,我需要将它传递给Python以存储在变量中 你知道为什么吗?你可以阅读下面的Github文章。也许这会有帮助 返回值 虽然我们希望将代码视为包含单个应用程序,但Python解释器和浏览器窗口在单独的进程中运行。这会使它们之间的通信变得有点混乱,特别是如果我们总是要显式地将值从一端发送到另一端 Eel支持两种从应用程序另一端检索返回值的方法,这有助于保持代码简洁 为了防止Python端永远挂起,为尝

我有一个python程序,它使用eel库构建了一个漂亮的GUI

在GUI中,JS函数中有一个变量,我需要将它传递给Python以存储在变量中


你知道为什么吗?

你可以阅读下面的Github文章。也许这会有帮助

返回值 虽然我们希望将代码视为包含单个应用程序,但Python解释器和浏览器窗口在单独的进程中运行。这会使它们之间的通信变得有点混乱,特别是如果我们总是要显式地将值从一端发送到另一端

Eel支持两种从应用程序另一端检索返回值的方法,这有助于保持代码简洁

为了防止Python端永远挂起,为尝试从JavaScript端检索值设置了超时,默认为10000毫秒(10秒)。可以使用_js_result_timeout参数将其更改为eel.init。JavaScript端没有相应的超时

回调 调用公开函数时,可以在调用后立即传递回调函数。当函数在另一端完成执行时,将使用返回值自动异步调用此回调

例如,如果我们在Javascript中定义并公开了以下函数:

eel.expose(js_random);
function js_random() {
  return Math.random();
}
然后在Python中,我们可以从Javascript端检索随机值,如下所示:

    def print_num(n):
        print('Got this from Javascript:', n)

# Call Javascript function, and pass explicit callback function
eel.js_random()(print_num)

# Do the same with an inline lambda as callback
eel.js_random()(lambda n: print('Got this from Javascript:', n))
(It works exactly the same the other way around).
同步回报 在大多数情况下,对另一方的调用是为了快速检索某些数据,例如小部件的状态或输入字段的内容。在这些情况下,只需同步等待几毫秒,然后继续编写代码,而不是将整个过程分解为回调,这样会更方便

要同步检索返回值,只需不向第二组括号传递任何内容。因此,我们将用Python编写:

n = eel.js_random()()  # This immediately returns the value
print('Got this from Javascript:', n)
您只能在浏览器窗口启动后(在调用eel.start()之后)执行同步返回,否则显然会使用挂起调用

在Javascript中,该语言不允许我们在等待回调时阻塞,除非在异步函数中使用wait。因此,Javascript方面的等效代码是:

async function run() {
  // Inside a function marked 'async' we can use the 'await' keyword.

  let n = await eel.py_random()(); // Must prefix call with 'await', otherwise it's the same syntax
  console.log("Got this from Python: " + n);
}

run();

请添加您共享的链接的简要说明,因为链接可能在一段时间后不可用。