From 4568f658665ed947bc82e91dd0f1c548278ecd78 Mon Sep 17 00:00:00 2001 From: tebarius Date: Tue, 22 Jul 2025 12:46:19 +0200 Subject: [PATCH] prepared for implement more functions --- app/app.py | 113 ++++++++++++++++++++++++++++----------------------- app/tools.py | 45 ++++++++++---------- 2 files changed, 86 insertions(+), 72 deletions(-) diff --git a/app/app.py b/app/app.py index 617bd95..1aec8b2 100644 --- a/app/app.py +++ b/app/app.py @@ -1,74 +1,87 @@ # app.py import streamlit as st +from pyarrow.interchange.from_dataframe import map_date_type + from tools import * +standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem' + ' Eingabefeld aufrufen.') + st.set_page_config( - page_title="tebarius mysteryhelfer web", + page_title="tebarius Mysteryhelfer (web)", page_icon="./favicon.ico", # Alternativ: "favicon.ico" (Pfad als String) layout="wide" ) st.logo('./logo.png', size='large') - -# Optional: Standard für den Session State setzen -if 'letzte_aktion' not in st.session_state: - st.session_state['letzte_aktion'] = None -if 'output_text' not in st.session_state: - st.session_state['output_text'] = ('Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion' - ' mit leerem Eingabefeld aufrufen.') -if 'show_map' not in st.session_state: - st.session_state['show_map'] = False -if 'map_data' not in st.session_state: - st.session_state['map_data'] = None - - logo_col, title_col = st.columns([1,5]) with logo_col: - st.image('./logo-mit-tb.png', width=200) + st.image('./logo-mit-tb.png', width=150) with title_col: - st.write(' \n \n# tebarius web-Mysteryhelfer') + st.write('### tebarius Mysteryhelfer (web)') + +# Callback-Funktion zur Verarbeitung der Auswahl +def auswahl_verarbeiten(): + text = st.session_state.input_text + auswahl = st.session_state.option + if auswahl == "Wähle eine Funktion": + st.session_state.output_text = standard_output + st.session_state.map_data = None + elif auswahl == "Cesarchiffre (all)": + st.session_state.output_text = cesar_all(text) + st.session_state.map_data = None + elif auswahl == "BW,BWW,... ermitteln": + st.session_state.output_text = buchstabenwortwert(text) + st.session_state.map_data = None + elif auswahl == "Dummy mit Karte": + output, mapd = funktion_mit_karte(text, additional_parameter) + st.session_state.output_text = output + st.session_state.map_data = mapd + +# Standardwerte im Session State initialisieren +if 'option' not in st.session_state: + st.session_state.option = "Wähle eine Funktion" +if 'input_text' not in st.session_state: + st.session_state.input_text = "" +if 'output_text' not in st.session_state: + st.session_state.output_text = standard_output +if 'map_data' not in st.session_state: + st.session_state.map_data = None # Eingabefeld im Hauptbereich -input_text = st.text_area('Gib deinen Text hier ein und wähle eine Funktion im Menü:', height=150) +input_text = st.text_area('Gib deinen Text hier ein und wähle eine Funktion im Menü auf der linken Seite:', + key='input_text', + height=150) # --- Sidebar: Buttons selektieren und Aktion setzen --- -st.sidebar.header("Funktionen") -if st.sidebar.button(label='Ceasarchiffre (all)', use_container_width=True): - st.session_state['output_text'] = cesar_all(input_text) - st.session_state['letzte_aktion'] = 'cesar_all' - st.session_state['show_map'] = False +option = st.sidebar.radio("hidden_label", + options=("Wähle eine Funktion", + "Dummy mit Karte", + "Cesarchiffre (all)", + "BW,BWW,... ermitteln", + ), + key='option', + on_change=auswahl_verarbeiten, + label_visibility='collapsed' + ) -if st.sidebar.button('BW,BWW,... ermitteln', use_container_width=True): - st.session_state['output_text'] = buchstabenwortwert(input_text) - st.session_state['letzte_aktion'] = 'bbw' - st.session_state['show_map'] = False +# Optionales einzeiliges Eingabefeld nur für bestimmte Funktionen +additional_parameter = None +if option == "Dummy mit Karte": + additional_parameter = st.text_input( + "Optionaler Zusatztext für Dummy mit Karte", + placeholder="Zusätzliche Eingabe hier" + ) -# Funktion, die eine Karte erzeugt -if st.sidebar.button('Mit Karte anzeigen'): - output_text, map_data = funktion_mit_karte(input_text) - st.session_state['output_text'] = output_text - st.session_state['letzte_aktion'] = 'funktion_mit_karte' - st.session_state['show_map'] = True - st.session_state['map_data'] = map_data - -# --- Hauptbereich: Button für Wiederholung der letzten Aktion --- -if st.button("Letzte Aktion wiederholen"): - if st.session_state['letzte_aktion'] == 'cesar_all': - st.session_state['output_text'] = cesar_all(input_text) - st.session_state['show_map'] = False - elif st.session_state['letzte_aktion'] == 'bbw': - st.session_state['output_text'] = buchstabenwortwert(input_text) - st.session_state['show_map'] = False - elif st.session_state['letzte_aktion'] == 'funktion_mit_karte': - output_text, map_data = funktion_mit_karte(input_text) - st.session_state['output_text'] = output_text - st.session_state['show_map'] = True - st.session_state['map_data'] = map_data +# Button zum manuellen Ausführen der Verarbeitungsfunktion +if st.button(f"{st.session_state.option}"): + auswahl_verarbeiten() # Ausgabefeld -st.text_area('Ausgabe:', value=st.session_state['output_text'], height=300) +st.markdown('__Ausgabe:__') +st.markdown(st.session_state.output_text) # Karte anzeigen, falls aktiviert -if st.session_state.get('show_map') and st.session_state.get('map_data') is not None: +if st.session_state.map_data is not None: st.subheader("Kartenansicht") - st.map(st.session_state['map_data']) + st.map(st.session_state.map_data) diff --git a/app/tools.py b/app/tools.py index 12dc60e..7cbdcfe 100644 --- a/app/tools.py +++ b/app/tools.py @@ -1,18 +1,19 @@ from helper import * import pandas as pd -def funktion_mit_karte(text): +def funktion_mit_karte(text,param): """Verarbeitet Text und liefert Daten für eine Karte (z.B. Potsdam Zentrum).""" # Beispiel: Fester Punkt (Potsdam) daten = pd.DataFrame({'lat': [52.4006], 'lon': [13.0590]}) ausgabe_text = f"Folgende Koordinate wurde gefunden: {daten.iloc[0].lat}, {daten.iloc[0].lon}" + ausgabe_text += f' \n text: {text} \n parameter: {param}\n' return ausgabe_text, daten def cesar_all(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("HILFE: [Cesar-Verschiebe-Chiffre] \n" + return ("### Cesar-Verschiebe-Chiffre\n" "Von der eingegebenen Zeichenkette werden, " "alle möglichen Verschiebungen gemäß der " "Cesarchiffre generiert und ausgegeben. " @@ -38,15 +39,13 @@ def cesar_all(eingabetext): atxt = atxt + abc[j + r - 26] else: atxt = atxt + abc[j + r] - if r < 10: - ausgabe += "0" - ausgabe += f"{r}: {atxt} \n" + ausgabe += f"__{r:02}:__ {atxt} \n" return ausgabe def buchstabenwortwert(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - return ("HILFE: [Buchstabenwortwerte ermitteln] \n" + return ("### Buchstabenwortwerte ermitteln\n" "Diese Funktion berechnet den Buchstabenwert " "der eingegeben Zeichenkette. (A=1 B=2 .... " "Ä=27 Ö=28 Ü=29 ß=30) Bei mehreren durch " @@ -100,22 +99,24 @@ def buchstabenwortwert(eingabetext): ewortptxt = ewortptxt + str(ewortprod) + "/" ausgabe += atxt + " \n" - ausgabe += "Buchstabenwerte: " - ausgabe += az[0:-1] + " \n" - ausgabe += "Buchstabenwortwerte: " - ausgabe += eworttxt[0:-1] + " \n" - ausgabe += "Summe aller Buchstabenwerte: " - ausgabe += str(wortsumme) + " \n" - ausgabe += "Quersumme der Summe aller Buchstabenwerte / iterierte Quersumme: " - ausgabe += str(q_sum(wortsumme)) + " / " + str(iq_sum(wortsumme)) + " \n" - ausgabe += "Buchstabenanzahl pro Wort: " - ausgabe += banzwtxt[0:-1] + " \n" - ausgabe += "Gesamtanzahl aller Buchstaben: " - ausgabe += str(banzahla) + " \n" - ausgabe += "Wortprodukte(0 wenn kein Buchstabe gefunden): " - ausgabe += ewortptxt[0:-1] + " \n" - ausgabe += "Buchstabenwert-Produkt:(Nullen werden ignoriert): " - ausgabe += str(wortprodukt) + " \n" + ausgabe += '| | |\n' + ausgabe += '|----|----|\n' + ausgabe += "|_Buchstabenwerte:_|" + ausgabe += az[0:-1] + "|\n" + ausgabe += "|_Buchstabenwortwerte:_|" + ausgabe += eworttxt[0:-1] + "|\n" + ausgabe += "|_Summe aller Buchstabenwerte:_|" + ausgabe += str(wortsumme) + "|\n" + ausgabe += "|_Quersumme der Summe aller Buchstabenwerte / iterierte Quersumme:_|" + ausgabe += str(q_sum(wortsumme)) + " / " + str(iq_sum(wortsumme)) + "|\n" + ausgabe += "|_Buchstabenanzahl pro Wort:_|" + ausgabe += banzwtxt[0:-1] + "|\n" + ausgabe += "|_Gesamtanzahl aller Buchstaben:_|" + ausgabe += str(banzahla) + "|\n" + ausgabe += "|_Wortprodukte(0 wenn kein Buchstabe gefunden):_|" + ausgabe += ewortptxt[0:-1] + "|\n" + ausgabe += "|_Buchstabenwert-Produkt:(Nullen werden ignoriert):_|" + ausgabe += str(wortprodukt) + "|\n" return ausgabe