Spaces:
Sleeping
Sleeping
| 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() |