如何在Tkinter中进行多个键

时间:2019-03-15 22:05:19

标签: python python-3.x tkinter tkinter-canvas

我试图按下多个键,但是命令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 :(得分:0)

您必须绑定到Buttons所在的窗口小部件。为了获得最大的效果,请绑定到root。

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