鱼C论坛

 找回密码
 立即注册
查看: 3214|回复: 9

[已解决]streamlit 的layout问题

[复制链接]
发表于 2023-5-31 21:34:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
streamlit 如何控制第一行放两个2按钮布局,第二行放3个按钮布局,第三行放4下拉框布局

这种如何实现?
如果都按照某一个分列原则可以用st.col控制,当遇到每行列数不一样的布局咋办?
最佳答案
2023-5-31 22:18:55
rsj0315 发表于 2023-5-31 22:03
如何控制label和控制在一行上呢?

在Streamlit中,可以使用st.write方法将文本和控件写入同一行。例如,您可以使用以下代码将标签和文本框放在同一行上:
import streamlit as st

st.write("姓名:", st.text_input(""))
在这个例子中,我们将"姓名:"标签和文本框放在了同一行上,这样用户可以直接在文本框中输入姓名。您可以根据需要自定义标签和控件类型以实现各种布局需求。

注意:如果您希望在同一行上放置多个控件,您需要在每个控件之间加上空格或者其他分隔符。您也可以使用CSS来进一步控制布局,在Streamlit中使用CSS可以通过st.write和st.markdown方法以HTML的形式直接嵌入CSS代码。以下是一个示例:
import streamlit as st

css = """
<style>
.my-class {
    color: red !important;
}
</style>
"""

st.markdown(css, unsafe_allow_html=True)

st.write('<p class="my-class">这段文字将会是红色的。</p>', unsafe_allow_html=True)
在上面的例子中,我们首先定义了一个CSS类.my-class,并设置它的颜色为红色。然后,在st.markdown方法中以不安全模式(即设置unsafe_allow_html=True)解析CSS代码,最后使用st.write方法在页面中输出一个带有.my-class类的段落标签,从而使文本呈现为红色。

使用CSS时需要注意安全问题。请确保您只使用可靠的CSS代码,并使用不安全模式时仅允许来自受信任来源的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-31 21:45:57 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-5-31 21:48 编辑

实现该布局可以使用 Streamlit 的 beta_columns 和 beta_expander 方法。beta_columns 可以将页面分成多列,并在每列中放置控件,而 beta_expander 则可以收起或展开一组控件。

以下是示例代码:
import streamlit as st

# 第一行
col1, col2 = st.beta_columns(2)
with col1:
    st.button("按钮1")
with col2:
    st.button("按钮2")

# 第二行
col1, col2, col3 = st.beta_columns(3)
with col1:
    st.button("按钮1")
with col2:
    st.button("按钮2")
with col3:
    st.button("按钮3")

# 第三行
col1, col2, col3, col4 = st.beta_columns(4)
with col1:
    st.selectbox("下拉框1", options=["选项1", "选项2", "选项3"])
with col2:
    st.selectbox("下拉框2", options=["选项1", "选项2", "选项3"])
with col3:
    st.selectbox("下拉框3", options=["选项1", "选项2", "选项3"])
with col4:
    st.selectbox("下拉框4", options=["选项1", "选项2", "选项3"])

在上述代码中,beta_columns方法被用来分成了不同数量的列,每个列中包含了不同类型的控件。通过这种方式,可以轻松实现多行、多列的复杂布局。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-31 22:00:46 | 显示全部楼层
歌者文明清理员 发表于 2023-5-31 21:45
实现该布局可以使用 Streamlit 的 beta_columns 和 beta_expander 方法。beta_columns 可以将页面分成多列 ...

import streamlit as st



# 第一行
col1, col2 = st.columns(2)
with col1:
    st.button("按钮1")
with col2:
    st.button("按钮2")

# 第二行
col1, col2, col3 = st.columns(3)
with col1:
    st.button("按钮11")
with col2:
    st.button("按钮12")
with col3:
    st.button("按钮3")

# 第三行
col1, col2, col3, col4 = st.columns(4)
with col1:
    st.selectbox("下拉框1", options=["选项1", "选项2", "选项3"])
with col2:
    st.selectbox("下拉框2", options=["选项1", "选项2", "选项3"])
with col3:
    st.selectbox("下拉框3", options=["选项1", "选项2", "选项3"])
with col4:
    st.selectbox("下拉框4", options=["选项1", "选项2", "选项3"])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-31 22:03:15 | 显示全部楼层
如何控制label和控制在一行上呢?
layout.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 22:18:55 | 显示全部楼层    本楼为最佳答案   
rsj0315 发表于 2023-5-31 22:03
如何控制label和控制在一行上呢?

在Streamlit中,可以使用st.write方法将文本和控件写入同一行。例如,您可以使用以下代码将标签和文本框放在同一行上:
import streamlit as st

st.write("姓名:", st.text_input(""))
在这个例子中,我们将"姓名:"标签和文本框放在了同一行上,这样用户可以直接在文本框中输入姓名。您可以根据需要自定义标签和控件类型以实现各种布局需求。

注意:如果您希望在同一行上放置多个控件,您需要在每个控件之间加上空格或者其他分隔符。您也可以使用CSS来进一步控制布局,在Streamlit中使用CSS可以通过st.write和st.markdown方法以HTML的形式直接嵌入CSS代码。以下是一个示例:
import streamlit as st

css = """
<style>
.my-class {
    color: red !important;
}
</style>
"""

st.markdown(css, unsafe_allow_html=True)

st.write('<p class="my-class">这段文字将会是红色的。</p>', unsafe_allow_html=True)
在上面的例子中,我们首先定义了一个CSS类.my-class,并设置它的颜色为红色。然后,在st.markdown方法中以不安全模式(即设置unsafe_allow_html=True)解析CSS代码,最后使用st.write方法在页面中输出一个带有.my-class类的段落标签,从而使文本呈现为红色。

使用CSS时需要注意安全问题。请确保您只使用可靠的CSS代码,并使用不安全模式时仅允许来自受信任来源的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 22:33:31 | 显示全部楼层
歌者文明清理员 发表于 2023-5-31 22:18
在Streamlit中,可以使用st.write方法将文本和控件写入同一行。例如,您可以使用以下代码将标签和文本框 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 22:52:35 | 显示全部楼层

你一会儿不在我就蹲点,一边刷视频
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 23:02:19 | 显示全部楼层
歌者文明清理员 发表于 2023-5-31 22:52
你一会儿不在我就蹲点,一边刷视频


别蹲了你,明天晚上,别把最后一次给浪费了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 23:05:17 | 显示全部楼层
isdkz 发表于 2023-5-31 23:02
别蹲了你,明天晚上,别把最后一次给浪费了

不听不听

Snipaste_2023-05-31_23-04-48.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-31 23:10:51 | 显示全部楼层
在Streamlit中,可以使用 beta_columns 函数来创建多个并排的列,实现一个行内的多个控件布局。然而,这个方法在2021年我更新的知识库中的版本里面还处于beta阶段,可能在更后续的版本中有所改变。此外,Streamlit目前没有内建的grid系统,因此每行的列数无法直接控制。如果你想要在一行中创建不同数量的元素,你需要在每行中分别创建这些列。

这是一个例子,演示如何在不同的行中创建不同数量的按钮和下拉框:
import streamlit as st

# 第一行,放两个按钮
col1, col2 = st.beta_columns(2)
col1.button('按钮1')
col2.button('按钮2')

# 第二行,放三个按钮
col1, col2, col3 = st.beta_columns(3)
col1.button('按钮3')
col2.button('按钮4')
col3.button('按钮5')

# 第三行,放四个下拉框
col1, col2, col3, col4 = st.beta_columns(4)
col1.selectbox('下拉框1', ['选项1', '选项2', '选项3'])
col2.selectbox('下拉框2', ['选项1', '选项2', '选项3'])
col3.selectbox('下拉框3', ['选项1', '选项2', '选项3'])
col4.selectbox('下拉框4', ['选项1', '选项2', '选项3'])

这个代码在每一行中分别创建了2个、3个和4个列,并在这些列中添加了按钮或下拉框。注意,这种方法仅在Streamlit的每个新版本中有效,可能在未来的版本中有所改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表