Tastaturereignis mit Frame-Widget verknüpfen

Fragen zu Tkinter.
Antworten
Kili0302
User
Beiträge: 9
Registriert: Montag 31. Dezember 2018, 14:49

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
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Kili0302
User
Beiträge: 9
Registriert: Montag 31. Dezember 2018, 14:49

__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!
Antworten