Как сделать несколько ключей в Tkinter - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь заставить нажимать несколько клавиш, но команда focus_set () делает доступной только одну кнопку, остальные клавиши не работают. Кнопка работает, если вы нажмете ее, но я хочу использовать кнопку на клавиатуре, как мне сделать так, чтобы все клавиши работали

btnUp = tkinter.Button(master=None, text="Up", command=up)
btnUp.bind("w", up)
btnUp.focus_set()
btnUp.pack(side=tkinter.TOP, anchor=tkinter.W)

btnRight = tkinter.Button(master=None, text="Right", command=right)
btnRight.bind("d", right)
btnRight.focus_set()
btnRight.pack(side=tkinter.TOP, anchor=tkinter.W)

btnLeft = tkinter.Button(master=None, text="Left", command=left)
btnLeft.bind("a", left)
btnLeft.focus_set()
btnLeft.pack(side=tkinter.TOP, anchor=tkinter.W)

btnDown = tkinter.Button(master=None, text="Down", command=down)
btnDown.bind("s", down)
btnDown.focus_set()
btnDown.pack(side=tkinter.BOTTOM, anchor=tkinter.W)

1 Ответ

0 голосов
/ 16 марта 2019

Вы должны привязать к виджету, в котором находятся кнопки. Для большей эффективности, привязать к корню.

btnUp = tkinter.Button(master=None, text="Up", command=up)
root.bind("w", up)
btnUp.pack(side=tkinter.TOP, anchor=tkinter.W)

Если у вас нет доступа к root в этой области, вы можете добавить это вверху:

root = tkinter._default_root

Помните, что обратный вызов команды Button и обратный вызов bind имеют разные подписи, поэтому вам нужно определить функции с необязательным аргументом события, например так:

def up(event=None):
    # code
...