Оператор% на символах и обработке событий в tkinter

Читая об обработке событий с помощью Tkinter, я обнаружил фрагмент кода ниже.

Может кто-нибудь объяснить мне, какова цель оператора по модулю здесь и как он работает, предполагая следующее объявление show_event_details функция:

def show_event_details(event):     
    event_name = {"2": "KeyPress", "4": "ButtonPress", "6": "Motion", "9":"FocusIn"}
    print ('='*50)
    print ("EventName=" + event_name[str(event.type)])
    print ("EventKeySymbol=" + str(event.keysym))
    print ("EventType=" + str(event.type))
    print ("EventWidgetId=" + str(event.widget))
    print ("EventCoordinate (x,y)=(" + str(event.x)+","+str(event.y)+")")
    print ("Time:", str(event.time))

Код:

alphanum = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789'

for i in alphanum:
  mye.bind("<KeyPress-%s>"%i, show_event_details)

keysyms = ['Alt_L', 'Alt_R','BackSpace', 'Cancel', 'Caps_Lock','Control_L',
       'Control_R','Delete', 'Down', 'End', 'Escape', 'Execute','F1',
       'F2', 'Home', 'Insert', 'Left','Linefeed','KP_0','KP_1','KP_2',
       'KP_3','KP_4','KP_5','KP_6','KP_7','KP_8','KP_9','KP_Add',
       'KP_Decimal','KP_Divide']

for i in keysyms:
  mye.bind("<KeyPress-%s>"%i, show_event_details)

2 ответа

% удваивается как оператор форматирования строки. Выражение

"<KeyPress-%s>" % i

оценивает строку, в которой %s заменяется значением i, (Это объяснение скрывает некоторые детали, например, почему %s используется и как все меняется, если правый операнд % это кортеж вместо одного значения. См. Документацию для получения дополнительной информации.)

В имеющемся у вас блоке кода оператор% используется для форматирования строки. Если вы заметили, следующую строку:

mye.bind("<KeyPress-%s>"%i, show_event_details)

Имеет "%s внутри строки и оператор% после этого. По сути, это говорит Python, что ему будет передан аргумент, который должен быть преобразован в строку и размещен там.

Это удобный способ представления переменных в строках с различными представлениями. В этом случае это преобразование переменной "i" в строку.

Другие вопросы по тегам