【问题标题】:How to use dash callback without an Input如何在没有输入的情况下使用破折号回调
【发布时间】:2019-06-09 02:12:01
【问题描述】:

我正在尝试在没有输入的情况下调用 plotly-dash 回调,并且该方法不会触发。

这是我尝试使用破折号构建的仪表板。过去,当我对输入和输出都使用回调时,一切正常,但是当我尝试仅使用输出时,结果不会显示在仪表板上。

html.Div(
    [

        html.P(
            "Tweet Count",
            className="twelve columns indicator_text"
        ),
        html.P(
            id = 'tweet_value',
            className="indicator_value"
        ),
    ],
    className="four columns indicator",

)

@app.callback(
Output("tweet_value","children")

)
def total_tweet_callback():

    return 100   

【问题讨论】:

  • 据我了解,至少需要一个输入,以便回调“知道”何时触发。如果回调没有触发器,为什么要使用回调?如果您希望 total_tweet_callback() 在加载时只运行一次,只需将 children=total_tweet_callback() 用于 P 元素。
  • @Shovalt 我尝试将孩子设置为回调函数,但出现错误。我做了一些分析,应用程序的目标是通过输入触发显示它们
  • 我这里有很多要解释的,所以我会把它作为答案发布,我们可以从那里开始工作,直到找到解决方案。
  • 你成功了吗?
  • @Shovalt 是的。我现在工作。我听从了你的指示。我没有使用 lamda 感谢标记的答案

标签: python plotly plotly-dash


【解决方案1】:

需要至少一个输入或事件才能调用回调,如dash.py 代码中所写:

没有InputEvent 元素,这个回调永远不会得到 调用。

(订阅输入组件会导致回调被调用 每当他们的价值观发生变化并订阅一个事件时,就会导致 触发事件时要调用的回调。)

在您的情况下 - 如果回调没有触发器,为什么要使用回调?如果您希望 total_tweet_callback 在加载时只运行一次,只需从布局中调用它:

def total_tweet_callback():
    return 100

app.layout = lambda: html.Div(
    [
        html.P(
            "Tweet Count",
            className="twelve columns indicator_text"
        ),
        html.P(
            children=total_tweet_callback(),
            id='tweet_value',
            className="indicator_value"
        ),
    ],
    className="four columns indicator",
)

注意:

  1. 我从total_tweet_callback 中删除了装饰器。
  2. 我为布局提供了一个返回 Div 元素的 函数。这不一定是必需的,并且取决于您的代码的其他方面,我不会在这里介绍,但您可以尝试删除 lambda: 并查看它是否仍然有效。

【讨论】:

  • 如果嵌入到 Django 应用程序中,我建议不要这样做。它有可能破坏迁移,请参阅stackoverflow.com/questions/69955759/…
  • @NickT,也许,但这不是帖子的主题。我试图通过对他们的代码进行最小的更改来回答 OP 的问题。
【解决方案2】:

所有回调在加载时都会运行一次,除非明确禁用。所以一个简单的解决方案是使用一个虚拟输入,引用任何东西,而不是使用它。

我不同意另一个答案。直接调用该函数不会使其触发每个“加载”。这样,该函数仅在语句运行时运行一次。该功能仅在应用启动时触发,并非每次点击浏览器刷新按钮时触发。如果你在那里使用datetime.datetime.now(),你可以看到区别。

【讨论】:

  • 更正:“直接调用函数不会使其在每次“加载”时触发。”这种说法似乎并不总是正确的。启动 Dash 应用程序有多种不同的方式,我可以说在某些情况下至少是正确的。不过我没有做更多的研究。所以我在这个答案中所说的至少有时是有用的。
猜你喜欢
  • 2019-11-22
  • 2015-04-13
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
相关资源
最近更新 更多