@@ -311,9 +311,13 @@ def _triplet_to_sequence(triplet):
311311 return '<' + _state_names [triplet [0 ]]+ _types [triplet [1 ]][0 ]+ '>'
312312
313313
314- def _warn_bad_binding (sequence , err ):
314+ def _warn_bad_binding (virtual , sequence , err ):
315315 # gh-55646: warn instead of crashing on an invalid key binding.
316- print (f'Warning: ignoring invalid key binding { sequence !r} : { err } ' ,
316+ action = virtual [2 :- 2 ] if virtual [:2 ] == '<<' and virtual [- 2 :] == '>>' \
317+ else virtual
318+ print (f'Warning: ignoring invalid key binding { sequence !r} '
319+ f'for { action !r} : { err } . '
320+ f'Please reconfigure it in the IDLE Settings dialog.' ,
317321 file = sys .stderr )
318322
319323
@@ -355,7 +359,8 @@ def bind(self, sequence=None, func=None, add=None):
355359 try :
356360 self .__binders [triplet [1 ]].bind (triplet , func )
357361 except tkinter .TclError as err :
358- _warn_bad_binding (_triplet_to_sequence (triplet ),
362+ _warn_bad_binding (sequence ,
363+ _triplet_to_sequence (triplet ),
359364 err )
360365 bad .append (triplet )
361366 for triplet in bad : # Drop the invalid sequences.
@@ -389,14 +394,15 @@ def event_add(self, virtual, *sequences):
389394 try :
390395 widget .event_add (self , virtual , seq )
391396 except tkinter .TclError as err :
392- _warn_bad_binding (seq , err )
397+ _warn_bad_binding (virtual , seq , err )
393398 continue # Drop the invalid sequence.
394399 else :
395400 if func is not None :
396401 try :
397402 self .__binders [triplet [1 ]].bind (triplet , func )
398403 except tkinter .TclError as err :
399- _warn_bad_binding (_triplet_to_sequence (triplet ), err )
404+ _warn_bad_binding (virtual ,
405+ _triplet_to_sequence (triplet ), err )
400406 continue # Drop the invalid sequence.
401407 triplets .append (triplet )
402408
0 commit comments