PySimpleGUI - text anzeigen in text Feld nach click auf button

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Sekretos
User
Beiträge: 3
Registriert: Sonntag 4. Juli 2021, 20:57

Hallo zusammen,
als PySimpleGUI-Neuling stelle ich mir gerade folgende frage:
Ich habe eine Funktion welche mir aus mehreren json Dateien Inhalte ausliest:

Code: Alles auswählen

#####---- create the list of files -----#######
dir_path = os.path.dirname(os.path.realpath(__file__))
filePath = str(dir_path +"/datafiles/")
list_of_files = glob.glob(filePath+ '*.json')           

####---- read files and show content for every file in path ----#######
def readShoes(lang_params):
    print(lang_params["text01"])
    for file_name in list_of_files: 
        with open(file_name) as json_file:
                data = json.load(json_file)
                for p in data['Details']:
                    print('Name: ' + p['Name'])
                    print('KM: ' + p['KM'])
                    print(lang_params["date01"], ':' + p['Date']) 
                    print('')                
        json_file.close()
Diese Ausgabe möchte ich nun nach einem Klick auf einen Button in einem Text Bereich ausgeben:

Code: Alles auswählen

#read language paramters/text
lang_params=readLanguageKey() #dienst zum auslesen der Anzeige texte (gespeichert in properties für Mehrsprachigkeit)

sg.change_look_and_feel('BrownBlue')
#create a button
layout = [
    [sg.Text("The ShoeAdmin-Tool")],
    [sg.Button(lang_params["option01"])]
]

#create the mainWindow
mainWindow = sg.Window("ShoeAdmin", layout, size=(600,400))

#create an event loop
while True:
    event, values = mainWindow.read()
    if  event == sg.WIN_CLOSED:
        break
    if event == lang_params["option01"]:
        readShoes(). #hier wollte ich auf die Funktion zugreifen


Aber wie bekomme ich die Verknüpfung zwischen einem Textfeld und dem anzuzeigendem text hin?

Danke schon mal für eure Unterstzützung.
Sekretos
User
Beiträge: 3
Registriert: Sonntag 4. Juli 2021, 20:57

Hab eine Lösung gefunden!
Thema geschlossen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

os.path und glob sind durch pathlib.Path ersetzt worden.
Benutze keine globalen Variablen, obwohl das mit SimpleGUI fast nicht möglich ist.
Etwas, das schon ein String ist, mit str nochmal in einen zu verwandeln, ist unsinnig. Strings stückelt man nicht mit + zusammen, sondern benutzt Format-Strings, außer bei Pfaden, da benutzt man das, was pathlib.Path bietet.
Funktionsnamen schreibt man wie Variablennamen komplett klein.
Dateien, die mit with geöffnet werden, brauchen nicht explizit geschlossen werden.

Code: Alles auswählen

from pathlib import Path

BASEPATH = Path(__file__).resolve().parent
DATAFILEPATH = BASEPATH / "datafiles"

def read_shoes(lang_params):
    print(lang_params["text01"])
    for filename in DATAFILEPATH.glob('*.json'):
        with filename.open(mode="rb") as file:
            data = json.load(file)
        for p in data['Details']:
            print(f"Name: {p['Name']}")
            print(f"KM: {p['KM']}")
            print(f"{lang_params['date01']}: {p['Date']}")
            print()
Wenn Du mit den Daten weiter arbeiten willst, dann mußt Du sie in eine passende Datenstruktur packen.
Sekretos
User
Beiträge: 3
Registriert: Sonntag 4. Juli 2021, 20:57

Danke Sirius3 für den Input. Werde als erstes die Benamungen anpassen. Dann schaue ich mir die pathlib Funktion an.
Antworten