Ich versuche mich gerade an Python. Ein ganz simples kleines Test-Projekt:
Wenn man das Programm startet, wird ein Fenster geöffnet, in das das Hauptmenü gemalt wird, das drei Buttons enthält.
Dann kann man daraufklicken und je nachdem, welcher es war, wird Level 1, 2 oder 3 ins Fenster gemalt.
Die Grafiken dafür sind bloß Test-Kritzeleien mit den Namen "testmenu.png" "testlvl1.png" "testlvl2.png" etc.
(Einrücken funktioniert hier nicht, ich mach das mit Punkten....)
VORWEG HABE ICH VERSUCHT, DIESE ALS GLOBALE VARIABLE ZU DEFINIEREN
Hintergrundbild = 1
HIER IST DIE FUNKTION, FÜR DEN BUTTON-CLICK
def Knopfdruck1():
....print("um 1 erhöht")
....imgMenu = PhotoImage(file="testlvl2.png")
....Hintergrundbild += 1
HIER IST DIE FUNKTION ZUM FENSTER-MALEN
def Fenster():
....fenster = Tk()
....fenster.geometry("1200x900")
....#Hintergrund-Bild zeichnen, bevor die Buttons gezeichnet werden
....imgMenu = PhotoImage(file="testmenu.png")
....menuhintergrund = Label(fenster,image=imgMenu)
....menuhintergrund.place(x=0,y=0)
....knopf1 = Button(fenster,text="lvl1",command=Knopfdruck1)
....knopf1.place(x=450,y=100) #wohin soll der Button
....fenster.mainloop() #Fenster zeichnen wird immer wiederholt, damit das Programm nicht aus geht
Fenster()
PROBLEM:
Ganz einfach gesagt: Wie kriege ich es hin, dass sich zwei verschiedene Funktionen (die Fenster-Funktion und die Buttonclick-Funktion) eine Variable teilen können?
Ich hätte gern entweder, dass außerhalb der Funktionen definiert wurde
"Hintergrundbild = 1"
aber bei Buttonclick wird dieses um 1 erhöht (und gespeichert)
und dann guckt die Fenster-Funktion
"if Hintergrundbild == 2, dann male das zweite png-Bild".
Aber ich kriege immer die Meldung, dass die angeblich lokale Variable "Hintergrundbild" (die ich zu allererst, noch vor den Funktionen, definiert hatte, benutzt würde, bevor sie definiert ist.
Und wenn man das nicht mit so einer Variablen machen würde, wäre es auch voll praktisch, wenn der Buttonclick einfach das andere PNG-Bild in die Variable "imgMenu" laden würde.
Aber das geht nicht, weil imgMenu tatsächlich eine lokale Variable von der Fenster-Funktion ist.
Wie mache ich die Variablen existent unabhängig von den Funktionen, die sie benutzen sollen, und lasse dann diverse Funktionen etwas an ihnen ändern und die Änderung auch abspeichern?
Also was ich brauche ist das:
Variable = 1
Funktion fürs Fenster()
....malt Hintergrund1, if Variable ist 1
....malt Hintergrund 2, if Variable ist 2
....malt einen Button ins Fenster, if Variable ist 1
....und muss aber Fenster.mainloop immer wieder malen, damit Programm nicht ausgeht
Funktion für ButtonClick()
....Variable += 1 und speichert das
....ODER: lädt direkt LVL2.png ins Fenster
Fenster()