【问题标题】:why the output is not shown while using streamlit buttons?为什么使用流光按钮时不显示输出?
【发布时间】:2021-07-27 16:03:42
【问题描述】:

这是我目前正在处理的精简代码。 当我单击“关于 Python”按钮时,它工作正常并显示“生成语法”按钮。但是当我单击“生成语法”按钮时,它没有显示任何内容,并且我的程序再次从第一个运行。请帮忙。

left, center, right = st.beta_columns(3)

left_one = left.button("About Python",key = "1")
center_one = center.button("Learn Python", key = "2")
right_one = right.button("Practice Python", key = "3")



if left_one:
    generate_syntax = st.button("Generate Syntax", key = "4")
    if generate_syntax:
        st.write("Hello All..")

提前致谢

【问题讨论】:

    标签: python streamlit


    【解决方案1】:

    这在Streamlit discussions 中很常见,因为乍一看它看起来像一个错误,但事实并非如此。一个简单而愚蠢的答案是“这就是流光的设计方式”。
    所以每次按下按钮,streamlit 都会重新运行整个网页,并且不会记住之前的状态(上一个按钮中的信息)。

    虽然我从未找到任何关于如何准确解决此问题的官方答案,但我确实设法做了一些变通方法。

    1. 使用复选框而不是按钮
    2. 使用Session State
    3. 创建小函数并在 if 条件下调用它们。

    【讨论】:

      【解决方案2】:

      当你点击About Python时:

      • left_one 的值变为True
      • 所有其他按钮(包括generate_syntax)的值变为False

      当你点击Generate Syntax时:

      • generate_syntax 的值变为True
      • left_one 的值变为False

      问题是你永远不会同时满足generate_syntaxTrueleft oneTrue 这两个条件。因此,您永远不会打印 "Hello All" Streamlit 在按钮方面一次只考虑一个状态更改。

      解决这个问题的方法是使用对象来存储状态。 @pathe_rao 已经建议使用来自this gistSessionState 对象:

      import streamlit as st  
      
      ### Copy and Paste Session state code here
      
      session_state = SessionState.get(left =False, right = False, center = False)
        
      left, center, right = st.beta_columns(3)
      
      left_one = left.button("About Python",key = "1")
      center_one = center.button("Learn Python", key = "2")
      right_one = right.button("Practice Python", key = "3")
      
      
      if left_one or session_state.left:
          session_state.left  = True
          session_state.right = False
          session_state.center = False
      
          generate_syntax = st.button("Generate Syntax", key = "4")
          if generate_syntax:
              st.write("Hello All..")
      
      if center_one or session_state.center:
          session_state.left  = False
          session_state.right = False
          session_state.center = True
      
      if right_one or session_state.right:
          session_state.left  = False
          session_state.right = True
          session_state.center = False
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 2017-06-06
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多