Форум сайта python.su
Добрый день. Обратил внимание на то, что в Windows в русской раскладке не работают горячие клавиши (например, ‘<Control-v>’) (в Linux все работает). С чем это связано? Как исправить? Пытался сделать
entry.bind('<Control-м>',test_func)
_tkinter.TclError: bad event type or keysym “м”
Офлайн
Попробуйте проверять event.state и event.keycode. Ловить можно просто <KeyPress>.
Например нажимая Ctrl+C при любой раскладке вы должны получить keycode=67, а bool(event.state & 4) должно быть True.
Офлайн
Griffon
У Ctrl+V во всех раскладках код 55. А могу ли я как-нибудь привязать этот код к событию?
entry.bind(55,test_func)
Офлайн
Вы можете KeyPress или KeyRelease перехватить, а внутри функции-обработчика уже перенаправить. Узнать, какая кнопка нажата можно через event. Еще есть virtual events, которые позволяют повесить один обработчик на несколько событий сразу.
Офлайн
4kpt_IIIПытаюсь это сделать с помощью такого кода:
Узнать, какая кнопка нажата можно через event.
#!/usr/bin/python3 import tkinter as tk def test_func(event): print("Pressed",repr(event.char)) root=tk.Tk() frame=tk.Frame(root,width=300,height=300) frame.pack() frame.bind('<KeyRelease>',test_func) frame.focus_set() root.mainloop()
Pressed ‘'В винде получаю:
Pressed ’м'
Exception in Tkinter callbackБез repr также получаю ошибку. Т.е. еще надо следить за локалью.
Traceback (most recent call last):
File “C:\Python33\lib\tkinter\__init__.py”, line 1489, in __call__
return self.func(*args)
File “tst100.pyw”, line 6, in test_func
print(“Pressed”,repr(event.char))
File “C:\Python33\lib\encodings\cp866.py”, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)
UnicodeEncodeError: ‘charmap’ codec can't encode character ‘\xec’ in position 1:
character maps to <undefined>
Офлайн
Смотрите. У каждой кнопки в зависимости от кодировки есть свой код. Там четыре параметра (char, keycode, keysum, keysum_num). Нужно писать обработчик, который будет перехватывать все нажатия (Any), отбирать из них нужные и уже распределять их по callback.
P.S. Нужно искать уникальный код по четырем параметрам для определения нажатия. Ничего более дельного посоветовать не могу, так как не пользуюсь виндой и проверить нет возможности, а накатывать это говно на свою машину желания нет
Отредактировано 4kpt_III (Авг. 29, 2015 23:21:25)
Офлайн