Tkinter - как сделать независимые от регистра клавиши?
Изучаю Tkinter, пишу пробные приложения
Понадобилось сделать смену текста по нажатию O на клавиатуре
Сделал через:
ch.bind("<o>", eeee), но возникла проблема:
Если я нажимаю o с выключенным Caps-Lock, событие срабатывает, но если Caps-Lock включен - событие не работает. Как можно решить данную проблему?
Полный код:
from tkinter import *
from tkinter.ttk import *
root = Tk()
ch = Label(text="j")
ch.place(x=50, y=51)
def eeee(e):
ch.config(text="e")
ch.bind("<o>", eeee)
root.mainloop()
Ответы (1 шт):
Можно привязываться к события <Key> (или к событиям нажатия/отпускания кнопок - <KeyPress>, <KeyRelease> соответственно) и смотреть поле keycode события - для любой клавиши там будет одинаковый код независимо от регистра или раскладки клавиатуры. Пример:
import tkinter as tk
root = tk.Tk()
def on_key(event):
print(event.keycode, event.keysym)
root.bind("<Key>", on_key)
root.mainloop()
Пример вывода (тут я жму латинскую a, потом ее же с зажатым shift, с зажатым ctrl, со включенным Caps Lock, переключаюсь в русскую раскладку - код keycode для этой клавиши все равно остается 38):
38 a
50 Shift_L
38 A
37 Control_L
38 a
66 Caps_Lock
38 A
64 Alt_L
50 ISO_Next_Group
38 Cyrillic_EF
50 Shift_L
38 Cyrillic_ef
66 Caps_Lock
38 Cyrillic_ef
Проверил на Windows - работает аналогично, но keycode выводит 65.