In einem Python Tkinter Menubar die geklickten knopf herraus finden?

... komplette Frage anzeigen

2 Antworten

Okay also du verwendest einfach die Methode partials vom Module functools. Enfach gesagt nimmt es deine Methode und die dazugehörigen parameter an und führt die Methode erst auf deinem Button klick aus.
Anders als wenn du einfach command = toggle(friend) schreiben, da ja hier zuerst die Methode ausgewertet wird und dann dieser Wert (oder garkeiner) command zugewiesen wird. Mehr dazu findest du hier -> https://docs.python.org/3/library/functools.html (strg+f "partial")

Ich habe den Code ein wenig verändert, da er immer noch nicht ganz funktionierte. Ich habe selbst noch nie etwas mit Menu Widgets gemacht deshalb sollte man sich immer eine gute Dokumentation anschauen. Entweder eben direkt bei Python (siehe oben) oder hier http://effbot.org/tkinterbook/menu.htm dort findest du ein Beispiel und auch alle Paramerter Methoden etc vom Widget Menu.

Das wichtigste ist also um deine Frage zu beantworten, dass du ein Parameter z.B buttonName deiner Methode hinzufügst und dann beim zuweisen partial verwendest.

def toggle(buttonName):
    # do something with buttonName
... command = functools.partial(toggle, Freund) #bei mir friend

Hier ist der gesamte code:

http://pastebin.com/rJRwVb1B

Antwort bewerten Vielen Dank für Deine Bewertung

GreenSkyP 15.08.2016, 15:37

Vielen Danke. Ich habe schon viele Forums durch aber das hat geklappt. Das es für solche fähle ein Model gibs wusste ich nicht. Nochmal vielen vielen Dank. Mit freundlichen grüßen Green.

0

Es wäre sehr hilfreich wenn du einen voll funktionierenden Code hier posten würdest. Es muss nicht dein wirklicher Code sein aber ein funktionierender so dass ich ihn direkt debuggen bzw benutzen kann. Ich habe schon eine Idee aber ich möchte so etwas immer erst selber testen bevor ich für verwirrung sorge.

Desweiteren sehe ich das du deine Variablen in großbuchstaben geschrieben hast. Normalerweise macht man so etwas nicht, außer es hat einen sehr sehr sehr guten Grund. In der Regel ist zu beachten: Variablen + Definitionen klein und Klassen groß (Nur der Anfangsbuchstabe).

Auch noch ein kleiner Tipp: wenn ich eine Variable habe, die ich als mehrzahl definiert habe ( so wie du Friends ) schreibe ich sie in der For-Loop so:

for friend in friends:
    #do something with friend

Regards

Antwort bewerten Vielen Dank für Deine Bewertung

GreenSkyP 15.08.2016, 05:21

Danke für die tipps. Ich werde es versuchen mir zu merken. Und so sieht das Funktionierende Skript aus: from tkintet import * Fenster = Tk() Fenster.geometry("600x400") Fenster.title("Menubar Test") Fenster.configure(bg = "Black") Freunde = ("Gandalf","Meister Dieb","Pokémon","Green") def toogle(): item = "Unbekannt" print("Du hast {} gedrückt".format(item) fm = Menu(Fenster) Fenster.configure(menu = fm) mi = Menu(fm, tearoff =False) for Freund in Freunde: mi.add_command(label = Freund ,command = toggle) fm.configure(menu = mi)

0

Was möchtest Du wissen?