Windows. Streamlit перезагружает страницу при каждом взаимодействии
Windows. Streamlit перезагружает страницу при каждом взаимодействии, и состояние сбрасывается. Поэтому кнопка Выбрать не работает
import streamlit as st
import pandas as pd
from datetime import datetime
import os
# Основная функция Streamlit
def main():
# Инициализация session_state
if 'selected_id' not in st.session_state:
st.session_state.selected_id = None
# Загрузка данных из df_00_aaa.csv
df = pd.read_csv('data/df_00_aaa.csv')
# Выбор двух случайных фото
samples = df.sample(2)
st.write("Случайно выбранные фото:")
cols = st.columns(2)
# Отображение фото и кнопок выбора
for i, sample in enumerate(samples.itertuples()):
cols[i].write(f"ID: {sample.id}")
cols[i].write(sample.description_rus)
if cols[i].button(f"Выбрать {sample.id}", key=f"btn_{sample.id}_{i}"):
st.session_state.selected_id = sample.id
st.write(f"Выбрано изображение с ID: {st.session_state.selected_id}")
# Отладочное сообщение: текущее значение selected_id
st.write(f"Текущее значение selected_id: {st.session_state.selected_id}")
# Кнопка "Записать"
if st.button("Записать"):
if st.session_state.selected_id:
# Создание папки data, если она не существует
os.makedirs('data', exist_ok=True)
# Инициализация df_client.csv, если файл не существует
if not os.path.exists('data/df_client.csv'):
df_client = pd.DataFrame(columns=['date', '600_foto'])
df_client.to_csv('data/df_client.csv', index=False)
st.write("Создан новый файл df_client.csv.") # Отладочное сообщение
else:
df_client = pd.read_csv('data/df_client.csv')
st.write("Загружен существующий файл df_client.csv:") # Отладочное сообщение
st.write(df_client) # Отладочное сообщение
# Добавление новой записи
new_row = pd.DataFrame({
'date': [datetime.now().strftime('%Y-%m-%d %H:%M')],
'600_foto': [st.session_state.selected_id]
})
df_client = pd.concat([df_client, new_row], ignore_index=True)
df_client.to_csv('data/df_client.csv', index=False)
st.write(f"Добавлена запись: {new_row.iloc[0]}") # Отладочное сообщение
else:
st.write("Изображение не выбрано.") # Отладочное сообщение
if __name__ == "__main__":
main()