tkinter, Datei öffnen und global Variable vermeiden
Verfasst: Freitag 18. September 2020, 11:15
Liebes Forum,
ich habe ein kleines Programm geschrieben, es funktioniert. Aber weil ich als Programmiereinsteiger auf der Suche nach Rat in diversen Foren lese, dass globale Variablen zu vermeiden sind, wende ich mich an Euch.
Weil das Problem nur auftritt, weil ich ein GUI mit tkinter haben wollte, steht es hier.
Ich habe einen tk.Button:
Dieser Button greift auf folgende Funktion zu, die eine Datei öffnet und einen Data Frame erzeugt:
Jetzt habe ich einen zweiten Button, der eine Funktion aufruft, die eine Funktion aufruft, die ... usw.
Am Ende dieser Abfolge von Funktionen war ursprünglich ein Zugriff auf die Funktion open_file(), um an den Data Frame zu gelangen.
Problem: Es wird dann natürlich wieder askopenfilename() ausgeführt, obwohl die Daten schon geladen sind.
Ich konnte mir nur mit der einer globalen Variable df und einer eingeschobenen Funktion helfen, auf die letztendlich der zweite Button zugreift:
Wie muss ich die Funktion open_file() umschreiben, damit ich auf den Data Frame zugreifen kann, ohne askopenfilename() nochmals auszuführen oder wie übergebe ich df ohne eine globale Variable zu nutzen?
Ich bin eher für eine kurz "schmutzige" Lösung zu haben. Sicherlich wäre eine Lösung Klassen zu nutzen, aber da bin ich noch nicht so firm.
Ich hoffe, die Skriptausschnitte verdeutlichen das Problem und ermöglichen einen Ratschlag.
Vielen Dank im Voraus!
ich habe ein kleines Programm geschrieben, es funktioniert. Aber weil ich als Programmiereinsteiger auf der Suche nach Rat in diversen Foren lese, dass globale Variablen zu vermeiden sind, wende ich mich an Euch.
Weil das Problem nur auftritt, weil ich ein GUI mit tkinter haben wollte, steht es hier.
Ich habe einen tk.Button:
Code: Alles auswählen
b_open = tk.Button(frame2, text = "Daten öffnen", command = open_file)
b_open.pack(padx = 5, pady = 5)
Code: Alles auswählen
def open_file():
global df
# Öffnen der csv-Datei
name = askopenfilename(filetypes = [("csv files","*.csv"), ("All files","*.*")],
initialdir = "F:/Python/Projekt/DataSets",
title = "Select File:")
# Dataframe aus Daten
df = pd.read_csv(name, sep = ";")
Code: Alles auswählen
b_zweid = tk.Button(frame2, text = "2D-Plot", command = zweid)
b_zweid.pack(padx = 5, pady = 5)
Problem: Es wird dann natürlich wieder askopenfilename() ausgeführt, obwohl die Daten schon geladen sind.
Ich konnte mir nur mit der einer globalen Variable df und einer eingeschobenen Funktion helfen, auf die letztendlich der zweite Button zugreift:
Code: Alles auswählen
def openfile():
return df
Ich bin eher für eine kurz "schmutzige" Lösung zu haben. Sicherlich wäre eine Lösung Klassen zu nutzen, aber da bin ich noch nicht so firm.
Ich hoffe, die Skriptausschnitte verdeutlichen das Problem und ermöglichen einen Ratschlag.
Vielen Dank im Voraus!