Aufrufende "Funktion" auswerten

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
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

Hallo. Bin in Python ein wenig unbedarft. Jetzt beschäftigt mich ein "Problem", das mich jetzt hauptsächlich aus Interesse beschäftigt.
Ich habe einen Button programmiert, der ruft nach Anklicken eine Funktion auf, die später mal was ausführen soll. Um das mal auszuprobieren hab ich einfach eine Funktion gebastelt die aus einer Liste einen Wert ausgibt je nach Knopfdruck.
Den Knopfdruck hab ich mir so zusammengeklaut:

Code: Alles auswählen

B1 = Button(buttonFrame, text=li[0], bg="#f2c618", width=15, height=10, command=lambda:callback1(0))
B1.grid(row=0, column=0, padx=0, pady=0)
meine Funktion die dann den Wert ausspuckt so:

Code: Alles auswählen

def callback1(a):
    strPaul=li2[a]
    print(strPaul)
Jetzt meine Frage: könnte ich das nicht so lösen, dass ich statt der Übergabe des Parameters mit der lambda-Funktion einfach den Namen der Übergebenden Funktion (hier der Button mit B1) auszulesen. Hab ja für jeden Button ein solches Konstrukt.
Leider habe ich momentan keine Idee, wonach in dem Fall suchen, drum täte mir ein Verweis auf das nötige Stichwort vermutlich schon gute Dienste.
Danke.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du mehr übergeben willst, mach das doch. Das lambda kann deinen callback doch mit beliebig vielen Argumenten aufrufen. Warum du das willst ist mir allerdings nicht so klar.
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

Danke für die Antwort.
__deets__ hat geschrieben: Sonntag 12. Januar 2020, 21:15 Wenn du mehr übergeben willst, mach das doch. Das lambda kann deinen callback doch mit beliebig vielen Argumenten aufrufen. Warum du das willst ist mir allerdings nicht so klar.
Ja, das kann ich schon, stimmt.
Mich interessiert das einfach.
Und, ich wollte das mal auf diese Weise probieren. Wenn das Projekt flexibler werden soll, kann ich das vermutlich dort schon gebrauchen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe nicht wirklich verstanden was genau du da erreichen willst. Oder war der Hinweis erstmal genug?
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

Ich habe nicht wirklich verstanden was genau du da erreichen willst. Oder war der Hinweis erstmal genug?
Danke nochmal für die Antwort.

Das ist wie gesagt, eine Interessensfrage:
Kann man irgendwie auslesen, welche Funktion eine bestimmte andere Funktion aufgerufen hat.
In meinem Fall, welcher der 10 Buttons die Funktion aufruft.
Also, dass ich statt eines jeweils spezifischen Parameter einfach den Buttonnamen auswerte.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Weil deine Annahme die umliegende Funktion hätte den callback aufgerufen schon falsch ist. Aufgerufen wird der durch das GUI Toolkit von irgendwo. Aber wer den callback REGISTRIERT hat kannst du eben durch die von mir genannte Technik mitteilen. Oder auch welcher Button das war. Oder wie deine Oma heißt. Schlussendlich beliebige Informationen. Wozu das dann gut ist musst du selbst wissen.
theoS
User
Beiträge: 108
Registriert: Dienstag 5. November 2019, 21:44

OK, danke. Dann ist meine Frage geklärt.
Antworten