Оператор% на символах и обработке событий в 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" в строку.