Funktionen Argumentübergabe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
benthejoker
User
Beiträge: 1
Registriert: Samstag 1. April 2017, 13:31

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
Zuletzt geändert von Anonymous am Sonntag 2. April 2017, 08:29, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

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?
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten