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: 14226
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()
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
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