为什么使用Streamlight按钮时不显示输出?

2024-04-25 18:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我目前正在处理的Streamlight代码。 当我点击“About Python”按钮时,它工作正常,并显示“Generate Syntax”按钮。但是当我点击“Generate Syntax”按钮时,它没有显示任何内容,我的程序再次从第一个开始运行。请帮忙

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..")

提前感谢


Tags: keyrightifbuttonleft按钮onegenerate
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


这在Streamlit discussions中非常常见,因为它乍一看像一个bug,但实际上不是。一个简单而愚蠢的答案是“Streamlight就是这样设计的”。
因此,每次按下按钮时,streamlit将重新运行整个网页,并且它不记得以前的状态(上一个按钮中的信息)

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

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

相关问题 更多 >