Summary
Hello
I’m using the st.form component through a modal (from streamlit_modal import Modal), and it has a st.text_input, when I put a method for the button’s callback, it doesn’t get the information typed in the text_input, what can I do? wrong ?
Steps to reproduce
Code snippet:
import streamlit as st
from streamlit_modal import Modal
from datetime import datetime, timedelta
import time
import pyodbc
import pandas as pd
def filtros(dtde,dtate,cliente,cidade,estado,vendedor,transp,ranking):
st.session_state.rankingvendas = ranking
sql = ""
sql = sql + " and between '{} 00:00:00' and '{} 23:59:00'".format(dtde, dtate)
if cliente != "":
sql = sql + " and TB01008_nome like '{}%' ".format(cliente)
if cidade != "":
sql = sql + " and TB00012_cidade = '{}' ".format(cidade)
if estado != "[Todos]":
sql = sql + " and TB00012_estado = '{}' ".format(estado)
if vendedor != "[Todos]":
sql = sql + " and tb01006_nome = '{}' ".format(vendedor)
if transp != "[Todos]":
sql = sql + " and tb01009_nome = '{}' ".format(transp)
st.session_state.filtrovendas += sql
def abrirmodal():
modal = Modal("Controle de Vendas", 0, 5, 800)
time.sleep(0.5)
modal.open()
if modal.is_open():
with modal.container():
frm = st.form("Filtros")
with frm:
now = datetime.now()
col1, col2, col3 = st.columns([0.25, 0.25, 0.50])
with col1:
dtde = st.date_input("Periodo de Vendas de:", value=now - timedelta(days=365))
with col2:
dtate = st.date_input("Periodo de Vendas até :", value=now)
with col3:
ranking = st.slider("Ranking (Gráfico)", 5, 15, st.session_state.rankingvendas)
col1, col2, col3 = st.columns([0.50, 0.30, 0.20])
with col1:
cliente = st.text_input("Nome do Cliente :", placeholder="Digite o nome")
with col2:
cidade = st.text_input("Cidade :", placeholder="Digite a Cidade")
with col3:
estado = st.selectbox("UF :",
("[Todos]","AC","AL","AM","AP","BA","CE","DF","ES","GO",
"MA","MG","MS","MT","PA","PB","PE","PI","PR","RJ",
"RN","RO","RR","RS","SC","SE","SP","TO","EX"))
listavendedor = listar_vendedor()
vendedor = st.selectbox("Selecione o Vendedor :",listavendedor);
listatransp = listar_transp()
transp = st.selectbox("Selecione a Transportadora :",listatransp);
st.write(st.session_state.filtrovendas)
st.form_submit_button('Aplicar',on_click=filtros(dtde,dtate,cliente,cidade,estado,vendedor,transp,ranking))
def listar_vendedor():
conexao = ("Driver={SQL Server};Server=localhost;Database=Dataclassic;UID=sa;PWD=sidney;")
dados = pyodbc.connect(conexao)
cursor = dados.cursor()
sql = """
select '[Todos]'
union
select tb01006_nome as nome from tb01006 where tb01006_situacao = 'A' and tb01006_nome is not null
order by 1 """
cursor.execute(sql)
valores = cursor.fetchall()
tabela = pd.DataFrame.from_records(valores)
return tabela
def listar_transp():
conexao = ("Driver={SQL Server};Server=localhost;Database=Dataclassic;UID=sa;PWD=sidney;")
dados = pyodbc.connect(conexao)
cursor = dados.cursor()
sql = """
select '[Todos]'
union
select tb01009_nome as nome from tb01009 where tb01009_inativo = 'N' and tb01009_nome is not null
order by 1 """
cursor.execute(sql)
valores = cursor.fetchall()
tabela = pd.DataFrame.from_records(valores)
return tabela