Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的WASD输入_Python_Tkinter_Keyboard - Fatal编程技术网

python中的WASD输入

python中的WASD输入,python,tkinter,keyboard,Python,Tkinter,Keyboard,在python中,如何接收键盘输入。我很清楚控制台输入是使用输入(“…”),但我更关心的是在控制台窗口未激活时接收键盘输入。例如,如果我创建了一个Tkinter屏幕的实例,我如何检查是否按下了“w”。然后,如果语句返回true,我可以相应地移动一个对象。使用tkinter之类的GUI工具包执行此操作的方法是创建一个绑定。绑定说明“当这个小部件有焦点并且用户按X键时,调用这个函数” 有很多方法可以实现这一点。例如,可以为每个字符创建不同的绑定。或者,您可以创建一个为任何角色触发的绑定。使用这些绑定

在python中,如何接收键盘输入。我很清楚控制台输入是使用
输入(“…”
),但我更关心的是在控制台窗口未激活时接收键盘输入。例如,如果我创建了一个Tkinter屏幕的实例,我如何检查是否按下了“w”。然后,如果语句返回true,我可以相应地移动一个对象。

使用tkinter之类的GUI工具包执行此操作的方法是创建一个绑定。绑定说明“当这个小部件有焦点并且用户按X键时,调用这个函数”

有很多方法可以实现这一点。例如,可以为每个字符创建不同的绑定。或者,您可以创建一个为任何角色触发的绑定。使用这些绑定,您可以让每个绑定调用一个唯一的函数,也可以让所有绑定调用一个函数。最后,您可以将绑定放在单个小部件上,也可以将绑定放在所有小部件上。这完全取决于你想要完成什么

在只需要检测四个键的简单情况下,调用单个函数的四个绑定(每个键一个)可能最有意义。例如,在Python2.x中,它看起来像这样:

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, width=400,  height=400)

        self.label = tk.Label(self, text="last key pressed:  ", width=20)
        self.label.pack(fill="both", padx=100, pady=100)

        self.label.bind("<w>", self.on_wasd)
        self.label.bind("<a>", self.on_wasd)
        self.label.bind("<s>", self.on_wasd)
        self.label.bind("<d>", self.on_wasd)

        # give keyboard focus to the label by default, and whenever
        # the user clicks on it
        self.label.focus_set()
        self.label.bind("<1>", lambda event: self.label.focus_set())

    def on_wasd(self, event):
        self.label.configure(text="last key pressed: " + event.keysym);


if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
将Tkinter作为tk导入
类示例(tk.Frame):
定义初始化(自身,父级):
tk.Frame.\uuuuuu init\uuuuuuuuuuuuuuuuu(自,父,宽度=400,高度=400)
self.label=tk.label(self,text=“上次按下的键:”,宽度=20)
self.label.pack(fill=“both”,padx=100,pady=100)
self.label.bind(“,self.on_wasd)
self.label.bind(“,self.on_wasd)
self.label.bind(“,self.on_wasd)
self.label.bind(“,self.on_wasd)
#默认情况下以及在任何时候为标签提供键盘焦点
#用户点击它
self.label.focus_set()
self.label.bind(“,lambda事件:self.label.focus\u set())
wasd上的def(自身、事件):
self.label.configure(text=“上次按下的键:”+event.keysym);
如果名称=“\uuuuu main\uuuuuuuu”:
root=tk.tk()
示例(root).pack(fill=“both”,expand=True)
root.mainloop()