Frage von GreenSkyP, 27

In einem Python Tkinter Menubar die geklickten knopf herraus finden?

Also ich habe eine Tkinter Menubar hinzugefügt das sieht so aus :

SM = Menu(SP) SP.configure(menu = Menu) MI = Menu(SM, tearoff = False) for Fr in Friends: MI.add_command(label=Fr , command =toggle) SM.configure(menu=MI)

Jetzt möchte ich in toggle herraus finden welches ich von den 'Commands' ich gedrückt habe? Habt ihr eine Idee, mit freundlichen grüßen Green.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von LifeArtist1, 11

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

Kommentar von GreenSkyP ,

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.

Antwort
von LifeArtist1, 15

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

Kommentar von GreenSkyP ,

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)

Keine passende Antwort gefunden?

Fragen Sie die Community