créér une frise chronologique
To upload files, please first save the app
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
from datetime import datetime
st.title("Créateur de Frise Chronologique")
# Initialisation de la liste des événements dans session_state
if 'events' not in st.session_state:
st.session_state.events = []
# Formulaire d'ajout d'événement
with st.form("event_form"):
col1, col2 = st.columns(2)
with col1:
event_date = st.date_input("Date de l'événement", datetime.now())
event_title = st.text_input("Titre de l'événement")
with col2:
event_description = st.text_area("Description de l'événement")
event_category = st.selectbox("Catégorie", ["Personnel", "Professionnel", "Historique", "Autre"])
submitted = st.form_submit_button("Ajouter l'événement")
if submitted and event_title:
st.session_state.events.append({
"date": event_date,
"title": event_title,
"description": event_description,
"category": event_category
})
# Affichage des événements
if st.session_state.events:
# Conversion en DataFrame
df = pd.DataFrame(st.session_state.events)
df = df.sort_values('date')
# Création de la frise chronologique avec Plotly
fig = go.Figure()
# Couleurs pour les catégories
colors = {
"Personnel": "#1f77b4",
"Professionnel": "#ff7f0e",
"Historique": "#2ca02c",
"Autre": "#d62728"
}
# Ajout des événements à la frise
for category in df['category'].unique():
df_cat = df[df['category'] == category]
fig.add_trace(go.Scatter(
x=df_cat['date'],
y=[1] * len(df_cat),
mode='markers+text',
name=category,
text=df_cat['title'],
textposition='top center',
marker=dict(size=12, color=colors[category]),
showlegend=True
))
# Mise en page
fig.update_layout(
title="Frise Chronologique",
height=400,
showlegend=True,
yaxis=dict(showticklabels=False, showgrid=False),
xaxis=dict(title="Date"),
hovermode='x'
)
# Affichage de la frise
st.plotly_chart(fig, use_container_width=True)
# Affichage des détails des événements
st.subheader("Détails des événements")
for event in sorted(st.session_state.events, key=lambda x: x['date']):
with st.expander(f"{event['date'].strftime('%d/%m/%Y')} - {event['title']}"):
st.write(f"**Catégorie:** {event['category']}")
st.write(f"**Description:** {event['description']}")
# Bouton pour effacer tous les événements
if st.button("Effacer tous les événements"):
st.session_state.events = []
st.rerun()
else:
st.info("Ajoutez des événements pour créer votre frise chronologique")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?