Hier noch etwas zum herum experimentieren:
Code: Alles auswählen
from tkinter import *
def app_win_handler(event):
print('app_win caught a key')
def toplevel_handler(event) :
print('toplevel caught a key')
#~~ Das fokusierte Widget befindet sich in Frame-A
if str(frame_a) == str(event.widget.winfo_parent()):
print('frame group-A caught a key')
#~~ Das fokusierte Widget befindet sich in Frame-B
if str(frame_b) == str(event.widget.winfo_parent()):
print('frame-group-B caught a key')
def frame_handler(event) :
print('frame caught a key')
def label1_handler(event) :
print('label-1 caught a key')
def label2_handler(event) :
print('label-2 caught a key')
def label3_handler(event) :
print('label-3 caught a key')
def label4_handler(event) :
print('label-4 caught a key')
def label5_handler(event) :
print('label-5 caught a key')
app = Tk()
app.bind('<Key>', app_win_handler)
app.title('Haupt-Fenster')
#~~ Applikations globale Konfigurationen
# WICHTIG: Die Optionsnamen sind ein Gemisch von klein & gross geschriebenen
# Buchstaben! (Entspricht nicht genau der Schreibweise wie bei einer
# widget-Konfiguration)
app.option_add("*Label.highlightColor", 'red')
app.option_add("*Label.highlightThickness", 1)
toplevel = Toplevel(takefocus=1)
toplevel.bind('<Key>', toplevel_handler)
toplevel.title('Toplevel-Fenster')
frame_a = Frame(toplevel, bg='khaki')
frame_a.bind( '<Key>', frame_handler )
frame_a.pack(fill='x')
frame_b = Frame(toplevel, bg='yellowgreen')
frame_b.bind( '<Key>', frame_handler )
frame_b.pack(fill='x')
label1 = Label(frame_a, text='Label-1 in frame-A', bg=frame_a['bg'])
label1.bind('<Key>', label1_handler)
label1.pack(fill='x')
label2 = Label(frame_a, text='Label-2 in frame-A', bg=frame_a['bg'])
label2.bind('<Key>', label2_handler)
label2.pack(fill='x')
label3 = Label(frame_b, text='Label-3 in frame-B', bg=frame_b['bg'])
label3.bind('<Key>', label3_handler)
label3.pack(fill='x')
label4 = Label(frame_b, text='Label-4 in frame-B', bg=frame_b['bg'])
label4.bind('<Key>', label4_handler)
label4.pack(fill='x')
label5 = Label(toplevel, text='Label-5 not in frame', bg='powderblue')
label5.bind('<Key>', label5_handler)
label5.pack(fill='x')
#~~ Aktiviert das Toplevelfenster
toplevel.transient(app)
#~~ Test-1
label1.focus_set()
#~~ Test-2
#label2.focus_set()
#~~ Test-3
#label3.focus_set()
#~~ Test-4
#label4.focus_set()
#~~ Test-5
#label5.focus_set()
app.mainloop()
Gruß wuf
