当前位置: 首页 > wzjs >正文

丹东网站开发公司鹤壁市做网站

丹东网站开发公司,鹤壁市做网站,如何做公司自己的网站首页,珠海模板建站定制网站目录 简介不携带信息的触发隐藏指定st.button(label, key)触发button的html代码汇总 携带信息的触发为什么需要携带信息前端JavaScript修改flask处理总代码 简介 由于streamlit可以同时在实现前后端结合,非常方便,但是这也造成了user难以方便的对页面的…

目录

  • 简介
  • 不携带信息的触发
    • 隐藏指定st.button(label, key)
    • 触发button的html
    • 代码汇总
  • 携带信息的触发
    • 为什么需要携带信息
    • 前端JavaScript修改
    • flask处理
    • 总代码


简介

由于streamlit可以同时在实现前后端结合,非常方便,但是这也造成了user难以方便的对页面的组件进行位置控制,本文将使用streamlit+flask,实现普通按钮触发与携带信息

不携带信息的触发

隐藏指定st.button(label, key)

这里给出隐藏指定button的方法

hidden_button_class = 'div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"]'
hide_button_style = f"""
<style>
{hidden_button_class} {{display: none;}}
</style>
"""  # 如果已经使用f方法,想使用花括号就必须使用{{代替{
st.markdown(hide_button_style, unsafe_allow_html=True)

hidden_button中的st-key-hidden_trigger可以根据你的button的key进行修改
如果key = “test”, 这里就改为st-key-test,就可以实现对某个指定button的隐藏!
当然,把.st-key-{key_name}删掉,就可以直接隐藏所有button

触发button的html

通过在页面插入iframe,在iframe内进行JavaScript操作,实现对隐藏button的模拟点击

all_html = f"""<script>function handleButtonClick(event) {{// 查找隐藏的streamlit按钮按钮const hiddenButton = parent.document.querySelector('div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"]');if (hiddenButton) {{// 触发点击hiddenButton.click();}}}}// 事件委托处理点击document.addEventListener('click', function(event) {{if (event.target.matches('.detail-btn')) {{handleButtonClick(event);}}}});</script><button class="detail-btn" data-title="test">点我</button> // 这里button的样式可以随便修改,根据需求"""
st.components.v1.html(all_html)

但是需要注意:外部的button样式对v1.html的样式不生效,内部的button样式对v1.html同样不生效
所以所有内部样式css必须写入all_html中

代码汇总

如果想要实现

import streamlit as sthide_button_style = """
<style>
div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"] {display: none;}
</style>
"""
st.markdown(hide_button_style, unsafe_allow_html=True)def generate_button():all_html = f"""<script>function handleButtonClick(event) {{// 查找隐藏按钮const hiddenButton = parent.document.querySelector('div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"]');if (hiddenButton) {{// 触发点击hiddenButton.click();}}}}// 事件委托处理点击document.addEventListener('click', function(event) {{if (event.target.matches('.detail-btn')) {{handleButtonClick(event);}}}});</script><button class="detail-btn" data-title="test">点我</button>"""st.components.v1.html(all_html)returngenerate_button()
if st.button("hidden_trigger", key="hidden_trigger"):st.success("可以修改为你想实现的功能~")
st.button("no_hidden_trigger", key="no_hidden_trigger")

css样式指定隐藏的button
我们在点击自己设定的button后,触发了隐藏的button,没有触发不隐藏的button


携带信息的触发

为什么需要携带信息

假设有这么一个股票信息管理界面,很明显,如果使用streamlit原生的组件,将难以实现查看详情的按钮效果(嵌入在内容卡片中),而一支股票有很多信息(意味着更多的查看详情),为每一个查看详情都提供一个隐藏button,会导致无意义的内存占用,所以可以通过设置一个隐藏按钮,并通过flask后端处理数据,接收并传递信息
在这里插入图片描述

前端JavaScript修改

def generate_button():all_html = f"""<script>function handleButtonClick(event) {{const title = event.target.dataset.title;// 查找隐藏按钮const hiddenButton = parent.document.querySelector('div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"]');if (hiddenButton) {{// 触发点击hiddenButton.click();// 发送数据到Flaskfetch('http://localhost:8000/api/data', {{method: 'POST',headers: {{'Content-Type': 'application/json',}},body: JSON.stringify({{title, stock}}),}}).then(response => response.json()).then(data => console.log('Success:', data)).catch(error => console.error('Error:', error));}}}}// 事件委托处理点击document.addEventListener('click', function(event) {{if (event.target.matches('.detail-btn')) {{handleButtonClick(event);}}}});</script><button class="detail-btn" data-title="test">点我</button>"""st.components.v1.html(all_html)return

关键在于向flask发送一个post请求,携带我们需要传递的信息(发送json串,解析为dict)
event.target.dataset是(<button class=“detail-btn” data-title=“test”>点我</button>)中,data-title的值
所以:event.target.dataset.title = “test”
利用这个属性来传递信息

flask处理

from flask import Flask, request, jsonify
from flask_cors import CORS
import requestsapp = Flask(__name__)
CORS(app)@app.route('/api/data', methods=['POST'])
def receive_data():data = request.get_json()title = process_data(data["title"])with open("data.txt", "w", encoding="utf-8") as f:f.write(title)return jsonify({200: "成功"})def process_data(data):# 数据处理逻辑return data.upper()if __name__ == '__main__':app.run(port=8000, debug=True)

一定需要CORS(),这意味着能不能实现跨域接收信息,只有加上这个才能实现网页发送信息,而flask后端能够接收网页发送的信息
同时在接收信息之后,能够将信息写入data.txt供其他文件调用(信息传递)

总代码

import timeimport streamlit as stdef generate_button():all_html = f"""<script>function handleButtonClick(event) {{const title = event.target.dataset.title;const stock = event.target.dataset.stock;// 查找隐藏按钮const hiddenButton = parent.document.querySelector('div[data-testid="stElementContainer"].st-key-hidden_trigger button[data-testid="stBaseButton-secondary"]');if (hiddenButton) {{// 触发点击hiddenButton.click();// 发送数据到Flaskfetch('http://localhost:8000/api/data', {{method: 'POST',headers: {{'Content-Type': 'application/json',}},body: JSON.stringify({{title, stock}}),}}).then(response => response.json()).then(data => console.log('Success:', data)).catch(error => console.error('Error:', error));}}}}// 事件委托处理点击document.addEventListener('click', function(event) {{if (event.target.matches('.detail-btn')) {{handleButtonClick(event);}}}});</script><button class="detail-btn" data-title="test">点我</button>"""st.components.v1.html(all_html)returngenerate_button()
if st.button("hidden_trigger", key="hidden_trigger"):time.sleep(0.05)  # 让flask能够写入信息,设置一小段时间延时with open("data.txt", "r", encoding="utf-8") as fr:content = fr.read()  # 读取携带的信息st.success("接收到信息:" + content)

文章转载自:

http://sU1d1cHz.qjfkz.cn
http://53k2Kxbz.qjfkz.cn
http://HFGdCKQI.qjfkz.cn
http://dwNcuaGL.qjfkz.cn
http://VeQmFnJa.qjfkz.cn
http://aIvO83MV.qjfkz.cn
http://rFUCbotL.qjfkz.cn
http://bVnGrOvd.qjfkz.cn
http://Ch4FzNa6.qjfkz.cn
http://udMTj0xW.qjfkz.cn
http://6gIsQ62i.qjfkz.cn
http://9dynq451.qjfkz.cn
http://OExkWyv6.qjfkz.cn
http://7WiuX48q.qjfkz.cn
http://TJ3qS4P7.qjfkz.cn
http://0e1t84DU.qjfkz.cn
http://McSZOBJZ.qjfkz.cn
http://IXpjZNOi.qjfkz.cn
http://NlPwX5VZ.qjfkz.cn
http://YQ3ieYzr.qjfkz.cn
http://95LygcoJ.qjfkz.cn
http://5Y4Fd3tz.qjfkz.cn
http://KJ3i7df5.qjfkz.cn
http://vUQYBHRG.qjfkz.cn
http://fCnWQpjc.qjfkz.cn
http://WPns3NFD.qjfkz.cn
http://nu1NYy5G.qjfkz.cn
http://xTmwlXaR.qjfkz.cn
http://FGFDfWVi.qjfkz.cn
http://efyG4GvQ.qjfkz.cn
http://www.dtcms.com/wzjs/679604.html

相关文章:

  • 安庆哪里做网站乐清新闻综合频道节目表
  • 如何做网站的实时画面wordpress 登录背景
  • 广州网站建设360网站优化wordpress图片旋转
  • 59网一起做网站网站做app的软件叫什么
  • 提供常州网站建设公司企业网站模板哪个好
  • 建一个购物网站要多少钱模拟制作app的软件
  • 网站建设技术网站建设网站建设计入什么科目
  • 个体户可以注册网站建设服务wordpress grace6
  • 网站建设 h5医院网站怎么做优化排名
  • 建设020网站需要多少钱国内环保行业网站开发
  • 深圳php网站开发个人网站设计公司
  • 做网站需要前置审批做游戏网站需要注意的问题
  • 网站基本功能文山专业网站建设哪家好
  • 网站建设常见问题凡客优品家居
  • 重庆品牌型网站建设多少钱指数函数图像及性质
  • 上海石化有做网站设计的吗wordpress 解释符号
  • 合肥网站建设首选 晨飞网络江门网络培训学院
  • 百度做任务的网站网站主页流动图片怎么做
  • 公司签约网站微信saas平台
  • 大庆市建设局网站网站开发工程师是做什么的
  • 上海网站设计工具吉林高端网站建设
  • 南昌网站专业制作订阅号可以做网站链接吗
  • 企业网站改版项目描述无锡网站建设标准
  • 网站建设的商品编码网站名称能用商标做名称吗
  • 海南省住房与城乡建设部网站谷歌关键词搜索量数据查询
  • 扬中网站建设价格借20万资金办厂
  • 怎样建设个自己的网站首页网站开发设计报告
  • 个人企业网站怎么建设百度网站首页提交入口
  • 怎样做让百度收录网站域名深圳 电子商务网站开发
  • 自学手机网站开发2022房产政策最新消息