Событие клавиатуры Tkinter не работает с персонажами - PullRequest
0 голосов
/ 19 апреля 2019

[Raspberri PI 3 b +, Python] Прежде всего, я хотел бы извиниться за мой языковой навык.

Я кодирую Tkinter для события клавиатуры, Клавиша клавиатуры, как (Вверх) (Вниз), являетсяработают хорошо, но обычные символы не работают (например, 1-9, AZ)

Я устал

frame.bind('<Left>', leftKey)      # THIS OK

frame.bind('<Right>', rightKey)    # THIS OK

но

frame.bind('<1>', leftKey)   # Not work

frame.bind('1', leftKey)     # Not work

frame.bind("1", leftKey)     # Not work

Я хотел бычтобы правильно использовать клавиатуру, используйте кнопки вверх, вниз.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

"1" и '1' должны работать."<1>" обозначает кнопку мыши 1.

Если вы привязываете к рамке, вы должны убедиться, что она имеет фокус клавиатуры.По умолчанию кадры не имеют фокусировки клавиатуры.

Например, чтобы навести фокус клавиатуры на кадр, вам нужно позвонить focus_set:

frame.focus_set()
0 голосов
/ 19 апреля 2019

Это может произойти, если рамка не имеет фокуса, поэтому frame.bind('<1>', leftKey) не будет работать.

Вы можете проверить, какой виджет имеет фокус, напечатав frame.focus_get().

Есть два способа решения вашей проблемы.

Либо вы устанавливаете фокус на кадр перед привязкой обратного вызова

Пример:

from tkinter import *

root = Tk()

root.geometry('100x100+100+100')

frame = Frame(root)
frame.pack()
frame.focus_set()   # This will get the frame in focus.

# If the frame is in focus the bind will work.
frame.bind( "1", lambda _: print(frame.focus_get()) )

root.mainloop()

Или

Просто привяжите его к главному окну.

from tkinter import *

root = Tk().  # Main window 

# bind the callback to the main window.
root.bind( '1', lambda k: print(k) )

root.mainloop()
...