Ok ich füge hier jetzt noch was hinten dran.
Ich habe mehrere Frames, nennen wir sie "Städte Frames", und innerhalb dieser Frames öffne ich mit einem Button einen anderen Frame. Dieser andere Frame, wir nennen ihn jetzt einfach mal "ATM Frame" ist immer derselbe. Das heißt, egal von welchem Frame aus ich mit dem Button den "ATM Frame" öffne, es würde genau der gleiche Frame geöffnet werden, wenn ich in einem anderen Frame den Button drücken würde.
Das ganze in Code verdeutlicht:
Code: Alles auswählen
#Init Malay
frame_malay = Frame(root, width=1450, height=770)
frame_malay.place(x=0, y=0)
button_goto_atm = Button(frame_malay, bg="LightGrey", image=atm_preview_image, bd=0)
button_goto_atm.place(x=312, y=495)
#Init Nabas
frame_nabas = Frame(root, width=1450, height=770)
frame_nabas.place(x=0, y=0)
button_goto_atm = Button(frame_nabas, bg="LightGrey", image=atm_preview_image, bd=0)
button_goto_atm.place(x=540, y=780)
Hier wären jetzt zum Beispiel mal zwei "Städte Frames". Die zwei Frames heißen
frame_malay und
frame_nabas.
Mit dem Button
button_goto_atm wird der ATM-Frame aufgerufen. Der
command-Teil dieser Buttons befindet sich weiter unten im Code, ist aber auch nicht sonderlich wichtig:
Die
call_atm Funktion schaut wie folgt aus:
Code: Alles auswählen
def call_atm():
frame_atm.tkraise()
#Hier steht natürlich eigentlich noch mehr, sonst könnte man sich die Funktion einfach sparen.
Innerhalb des ATM-Frames gibt es einen "Back-Button", sprich einen Button, der beim Drücken den vorherigen Frame anzeigen soll. Das heißt, wenn ich von
frame_malay in den "ATM-Frame" komm, dann möchte, wenn ich den "Back-Button" drücke, wieder zu
frame_malay.
Vielleicht sollte ich den "ATM-Frame" auch kurz zeigen:
Code: Alles auswählen
#Init ATM
frame_atm = Frame(root, width=1450, height=770)
frame_atm.place(x=0, y=0)
button_back_atm = Button(frame_atm, text= "", bg="LightGrey", image=button_back_image, command=???)
button_back_atm.place(x=1340, y=715)
Man beachte die command-Funktion des "Back-Buttons"
button_back_atm. Hier kommt nämlich das Problem. Ich habe bis jetzt noch keine Lösung gefunden, wie ich den vorherigen Frame aufrufe.
Folgendes: Diese Städte-Frames werden auch wieder in einem Haupt-Frame mittels Buttons aufgerufen.
Zum Beispiel so:
Code: Alles auswählen
button_malay = Button(frame_main_map, text="", bg="LightGrey", image=button_pic_1)
button_malay.place(x=364, y=49)
def call_malay_map():
frame_malay.tkraise()
#Hier steht natürlich eigentlich noch mehr, sonst könnte man sich die Funktion einfach sparen.
button_malay.configure(command=call_malay_map)
Ich habe mir überlegt, dass ich, beim Aufrufen der Städte-Frames zum Beispiel folgendes mache:
Code: Alles auswählen
last_called = None
def call_malay_map():
frame_malay.tkraise()
last_called = frame_malay
last_called würde ich dann einer anderen "Aufruf-Funktion" als Parameter mitgeben, die dann
last_called.tkraise() durchführt.
Aber, wie ich ja bereits in diesem Topic erfahren habe, würde das nicht funktionieren, denn die Variable
last_called bleibt bei der Funktion
call_malay_map() innerhalb der Funktion. Dementsprechend müsste ich die mit
return "raus bringen". Allerdings wüsste ich dann kein Ort, wo ich einer Variable die Variable
last_called zuordnen kann. Denn alles, was nicht in einer Funktion steht, wird ja beim GUI nur einmal, nämlich beim Starten des Programms aufgerufen. Dementsprechend wäre hier jetzt .set() extrem nützlich. Allerdings gibt es das laut
https://effbot.org/tkinterbook/variable.htm nur bei Strings, Doubles, Integers und Bool'sche Variablen. Also nicht bei Objekten wie es
frame_malay zum Beispiel ist.
Hätte jemand von euch da eine Lösung?