Bestimmen Sie, welche Taste in Tkinter gedrückt wurde?

Ich mache ein einfaches kleines Dienstprogramm beim Lernen von Python. Es erzeugt dynamisch eine Liste der Schaltflächen:

for method in methods: button = Button(self.methodFrame, text=method, command=self.populateMethod) button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3}) 

Dieser Teil funktioniert gut. Allerdings muss ich wissen, welche der Tasten in self.populateMethod gedrückt wurde. Irgendwelche Ratschläge, wie ich vielleicht sagen kann?

2 Solutions collect form web for “Bestimmen Sie, welche Taste in Tkinter gedrückt wurde?”

Sie können Lambda verwenden, um Argumente an einen Befehl zu übergeben:

 def populateMethod(self, method): print "method:", method for method in ["one","two","three"]: button = Button(self.methodFrame, text=method, command=lambda m=method: self.populateMethod(m)) button.pack({'fill': 'x', 'expand': 1, 'padx': 5, 'pady': 3}) 

Es scheint, dass die Befehlsmethode kein Ereignisobjekt übergeben wird.

Ich kann an zwei Workarounds denken:

  • Verknüpfen Sie jedem Button einen eindeutigen Rückruf

  • Rufen Sie button.bind('<Button-1>', self.populateMethod) anstatt self.populateMethod als command . Self.populateMethod muss dann ein zweites Argument akzeptieren, das ein Ereignisobjekt sein wird.

    Unter der Annahme, dass dieses zweite Argument als event , ist event.widget ein Verweis auf die Schaltfläche, die angeklickt wurde.

  • TCL-Code (auf einer vorhandenen TCL-Shell) von Python ausführen
  • Tkinter Check Box erhalten
  • Fokus auf spezifisches TKinter-Eintrags-Widget setzen
  • Was ist der Unterschied zwischen den Widgets von tkinter und tkinter.ttk in Python?
  • Tkinter askquestion Dialogfeld
  • Python tkinter: Machen Sie jede Ausgabe in einem Textfeld auf GUI nicht in der Shell erscheinen
  • TKInter: Anzahl der Pixel einer Zeile / Oval
  • Matplotlib hängt in Django
  • Python tkinter Bildschirmbreite und Höhensekundäranzeige
  • Tkinter zieht seltsam mit pyHook zurück
  • Python Tkinter: Wie kann ich die Schriftart des Menü-Widgets ändern?
  • Python ist die beste Programmiersprache der Welt.