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.

  • Schwierigkeiten mit der Tkinter-Transparenz haben
  • TKinter in einem Virtualenv
  • Kann nicht Hintergrundfarbe ttk python os x mit Stilen setzen
  • Wie kann ich ein Fenster anzeigen, das mit der Methode "Abheben" versteckt wurde?
  • Python tkinter öffnen ein neues Fenster mit einer Schaltflächenaufforderung
  • Tkinter Texteingabe mit pyHook hängt GUI-Fenster
  • Python TkinterTreectrl ziehen Elemente
  • KeyboardInterrupt eine Weile dauern
  • Python Tkinter: Progress Bar wird nicht minimiert, wenn die Hauptanwendung minimiert wird
  • Tkinter: Wie kann ich dynamisch ein Widget erstellen, das dann zerstört oder entfernt werden kann?
  • Fortsetzen von Code nach Schleife weiter?
  • Python ist die beste Programmiersprache der Welt.