Seite 1 von 1

Tastaturereignis mit Frame-Widget verknüpfen

Verfasst: Montag 31. Dezember 2018, 14:53
von Kili0302
Moin zusammen,
ich spiele gerade mit der tkinter-Bibliothek und Tastaturereignissen rum. Habe nun folgenden Code:

Code: Alles auswählen

import tkinter
 
def handler(event):
  print("Rechte Pfeiltaste gedrueckt") 
 
main = tkinter.Tk()
frame = tkinter.Frame(main, width=400, height=400)
frame.bind("<KeyPress-Right>", handler)
frame.pack()
main.mainloop()
Ich möchte, dass die Funktion "handler" ausgeführt wird, wenn die rechte Pfeiltaste gedrückt wird. Das passiert aber leider nicht. Kann mir jemand helfen?

Mit freundlichen Grüßen
Kilian

Re: Tastaturereignis mit Frame-Widget verknüpfen

Verfasst: Montag 31. Dezember 2018, 16:10
von __blackjack__
Ein Widget muss den Fokus haben, damit es Tastaturereignisse bekommt. Einem `Frame` kann man den Fokus aber als Benutzer nicht geben, das muss im Code passieren.

Eingerückt wird mit vier Leerzeichen pro Ebene.

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter


def handle_right_arrow(_event):
    print('Rechte Pfeiltaste gedrueckt') 


def main():
    root = tkinter.Tk()
    frame = tkinter.Frame(root, width=400, height=400)
    frame.pack()
    frame.bind('<KeyPress-Right>', handle_right_arrow)
    frame.focus()
    root.mainloop()


if __name__ == '__main__':
    main()

Re: Tastaturereignis mit Frame-Widget verknüpfen

Verfasst: Montag 31. Dezember 2018, 17:13
von Kili0302
__blackjack__ hat geschrieben: Montag 31. Dezember 2018, 16:10 Ein Widget muss den Fokus haben, damit es Tastaturereignisse bekommt. Einem `Frame` kann man den Fokus aber als Benutzer nicht geben, das muss im Code passieren.

Eingerückt wird mit vier Leerzeichen pro Ebene.

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter


def handle_right_arrow(_event):
    print('Rechte Pfeiltaste gedrueckt') 


def main():
    root = tkinter.Tk()
    frame = tkinter.Frame(root, width=400, height=400)
    frame.pack()
    frame.bind('<KeyPress-Right>', handle_right_arrow)
    frame.focus()
    root.mainloop()


if __name__ == '__main__':
    main()
Besten Dank, hat funktioniert!