GauthierDemonchy
v1
96e4e46
import gradio as gr
from calculs import calculate_and_plot, estimate_uf # Importation des fonctions
# Message explicatif
description = """
### Ce calculateur vous aide à évaluer si le remplacement des cadres de fenêtres est optimal ou s'il est préférable de les réutiliser.
Il compare à la fois :
🔴 **Les émissions de GES évitées** grâce à une meilleure performance thermique (chauffage)
🔵 **Les émissions de GES dues** à la fabrication du nouveau cadre
Si le point de croisement est atteint, le remplacement des cadres est intéressant. Sinon, la réutilisation est la solution optimal sur l'aspect environnemental !
💡 **Attention :** Uf du nouveau cadre doit être inférieur à celui de l'ancien.
"""
# Définition des choix possibles
options_chauffage = {
"Pompe à chaleur": ["Pac COPA 2,7", "Pac COPA 3,2", "Pac COPA 4,4", "Pac COPA 5,3"],
"Chaudiere": ["Chaudiere gaz naturel", "Chaudiere pellet", "Chaudiere buche", "Chaudiere biogaz","Chauffage à distance"]
}
# Mise à jour des options de chauffage dynamiquement
def update_heating_options(choice):
return gr.update(choices=options_chauffage[choice], value=options_chauffage[choice][0])
# Fonction de gestion des entrées utilisateur
def handle_input(heating_type, system, material, uf_known, uf_existing, year, frame_type, uf_new):
if uf_new <= 0:
return "⚠️ Veuillez entrer une valeur de Uf valide pour le nouveau cadre.", None
if uf_known == "Je connais le Uf du cadre existant":
if uf_existing is None or uf_existing <= 0:
return "⚠️ Veuillez entrer une valeur de Uf valide pour l'ancien cadre.", None
result_text, img = calculate_and_plot(system, material, uf_existing, uf_new)
return result_text, img
if uf_known == "Je ne connais pas le Uf, je connais l'année et le type de cadre":
if not year or not frame_type:
return "⚠️ Veuillez entrer l'année et le type de cadre.", None
uf_existing = estimate_uf(year, frame_type)
result_text, img = calculate_and_plot(system, material, uf_existing, uf_new)
return result_text, img
return "⚠️ Informations incomplètes. Vérifiez vos entrées.", None
# Mise à jour dynamique de la visibilité des champs
def update_visibility(uf_known):
is_known = uf_known == "Je connais le Uf du cadre existant"
return gr.update(visible=is_known), gr.update(visible=not is_known), gr.update(visible=not is_known)
# Interface Gradio
with gr.Blocks(css="""
.header-container {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
}
""") as demo:
with gr.Row(elem_classes="header-container"):
gr.Markdown(description)
gr.Image("picture_1.jpeg", elem_id="top-right-image", show_label=False, container=False, width=250, height=250)
# Sélection du type de chauffage
with gr.Row():
heating_type = gr.Radio(["Pompe à chaleur", "Chaudiere"], label="Type de chauffage", value="Pompe à chaleur")
system = gr.Dropdown(choices=options_chauffage["Pompe à chaleur"], label="Système de chauffage")
# Mise à jour dynamique des systèmes de chauffage
heating_type.change(fn=update_heating_options, inputs=heating_type, outputs=system)
# Sélection du matériau
material = gr.Radio(["Cadre bois", "Cadre bois métal", "Cadre PVC", "Cadre alu"],
label="Matériau du nouveau cadre")
# Uf du nouveau cadre
uf_new = gr.Number(label="Uf du cadre nouveau (W/m².K)")
# Mode d'entrée du Uf
uf_known = gr.Radio(
["Je connais le Uf du cadre existant", "Je ne connais pas le Uf, je connais l'année et le type de cadre"],
label="Comment voulez-vous entrer le Uf du cadre existant ?")
# Champs dépendants
uf_existing = gr.Number(label="Uf cadre existant (W/m².K)", visible=False)
with gr.Row():
year = gr.Number(label="Année du bâtiment", visible=False)
frame_type = gr.Radio(["Bois", "Bois-métal", "PVC", "Alu"], label="Type de cadre existant", visible=False)
# Mettre à jour la visibilité
uf_known.change(fn=update_visibility, inputs=uf_known, outputs=[uf_existing, year, frame_type])
# Bouton et résultats
submit_button = gr.Button("Calculer")
result = gr.Textbox(label="Résultat",container=False)
image_output = gr.Image(label="Graphique",container=False)
submit_button.click(fn=handle_input, inputs=[heating_type, system, material, uf_known, uf_existing, year, frame_type, uf_new],
outputs=[result, image_output])
# Lancer l'interface
demo.launch()