Seite 1 von 1

Funktionen Argumentübergabe

Verfasst: Sonntag 2. April 2017, 01:06
von benthejoker
Hallo,

ich hoffe ich bin hier richtig. Ich habe ein kleines Python Script geschrieben um meinen PC nach dem automatischen starten wieder herunterzufahren. Zu einem Problem habe ich in dem Forum hier eine Lösung gefunden und Codeteile übernommen. Das Programm läuft auch super, aber ich frage mich warum. :K

Code:

Code: Alles auswählen

def killcounter(count):
    label["text"] = count

    if count > 0:
        main.after(1000, killcounter, count-1)

    elif count == 0:
        os.system("shutdown /s /t 3")

#Funktionen
def ende():
    main.destroy()

def hfahren():
    main.destroy()
    os.system("shutdown /s /t 1")

#Hauptfenster
main = tkinter.Tk()

#lable
label = tkinter.Label(main)
label.place(x=90, y=65)

#Ende
endebuttonB = tkinter.Button(main, text="Ende", command=ende)
endebuttonB.pack()

herunterfahrenB = tkinter.Button(main, text="Herunterfahren", command=hfahren)
herunterfahrenB.pack()

killcounter(5)

main.mainloop()

Es wird hier "5" der Funktion übergeben, diese rechnet sich "4" aus und es geht weiter, da es ja eine Schleife ist. Werden danach nicht Theoretisch nocheinmal "5" übergeben... ? doch das Programm rechnet mit "4" weiter, als ob er sich gemerkt hätte das er das Argument bereits berabeitet hat. Warum ?

1. Aufrufen der Funktion und übergabe von "5"

Code: Alles auswählen

killcounter(5)
2. Ausführen der Funktion

Code: Alles auswählen

def killcounter(count):
    label["text"] = count

    if count > 0:
        main.after(1000, killcounter, count-1)

    elif count == 0:
        os.system("shutdown /s /t 3")
3. Loop

Code: Alles auswählen

main.mainloop()
4. Erneute übergabe von "5"

Code: Alles auswählen

killcounter(5)
Also wieso Funktioniert das obwohl er doch jedes mal "5" übergibt, oder verstehe ich da was falsch ? :?: :?:

Es tut mir Leid hier eine solch "Anfängerhafte" Frage stellen zu müssen.

Danke im Vorraus :) :D :shock:

LG Ben

Re: Funktionen Argumentübergabe

Verfasst: Sonntag 2. April 2017, 07:10
von bwbg
killcounter(5) wird, wie alles auf Modulebene, nur ein einziges mal ausgeführt. Das Problem ist, dass Du zu früh in Ereignis orientierte Programmierung (hier: GUI) einsteigst.

Was denkst Du, was der Methodenaufruf main.after... bewirkt?