【问题标题】:Detect key input in Python检测 Python 中的键输入
【发布时间】:2013-07-22 20:20:06
【问题描述】:

(2013 年) 不知道为什么 Python 这么奇怪,在 google 上搜索也找不到这个,但是很简单。

如何检测“SPACE”或任何键? 我该怎么做:

print('You pressed %s' % key)

这应该包含在python核心中,所以请不要链接与核心python无关的模块。

【问题讨论】:

    标签: python input tkinter keyboard


    【解决方案1】:

    你可以制作一个小 Tkinter 应用:

    import Tkinter as tk
    
    def onKeyPress(event):
        text.insert('end', 'You pressed %s\n' % (event.char, ))
    
    root = tk.Tk()
    root.geometry('300x200')
    text = tk.Text(root, background='black', foreground='white', font=('Comic Sans MS', 12))
    text.pack()
    root.bind('<KeyPress>', onKeyPress)
    root.mainloop()
    

    【讨论】:

    • 使用 Tk 需要图形窗口吗?我正在研究嵌入式系统。下面的 sys.strin.read() 很诱人,但你需要按回车。
    • @user391339:我认为 Tk 需要一个窗口系统或虚拟显示器。对于嵌入式系统,getch 配方(例如 this one)可能会更好。
    【解决方案2】:

    使用 Tkinter 网上有大量的教程。 基本上,您可以创建事件。这是一个很棒的网站的link! 这使得捕获点击变得容易。 此外,如果您正在尝试制作游戏,Tkinter 也有一个 GUI。 虽然,我根本不推荐将 Python 用于游戏,但这可能是一个有趣的实验。 祝你好运!

    【讨论】:

      【解决方案3】:

      按键输入是一个预定义的事件。您可以通过使用一种或多种现有绑定方法(bind、bind_class、tag_bind、bind_all)将event_sequence(s) 附加到event_handle(s) 来捕获事件。为此:

      1. 定义一个event_handle 方法
      2. 从an events list 中选择适合您情况的事件(event_sequence)

      当事件发生时,所有这些绑定方法都会隐式调用 event_handle 方法,同时传递一个 Event 对象,该对象包含有关已发生事件的具体信息作为参数。

      为了检测按键输入,可以先捕获所有'&lt;KeyPress&gt;'或'&lt;KeyRelease&gt;'事件,然后利用event.keysym属性找出使用的特定按键。

      下面是使用bind 捕获特定小部件上的'&lt;KeyPress&gt;' 和'&lt;KeyRelease&gt;' 事件的示例(root):

      try:                        # In order to be able to import tkinter for
          import tkinter as tk    # either in python 2 or in python 3
      except ImportError:
          import Tkinter as tk
      
      
      def event_handle(event):
          # Replace the window's title with event.type: input key
          root.title("{}: {}".format(str(event.type), event.keysym))
      
      
      if __name__ == '__main__':
          root = tk.Tk()
          event_sequence = '<KeyPress>'
          root.bind(event_sequence, event_handle)
          root.bind('<KeyRelease>', event_handle)
          root.mainloop()
      

      【讨论】:

        【解决方案4】:

        使用内置:(不需要 tkinter)

        s = input('->>')
        print(s) # what you just typed); now use if's 
        if s == ' ':
         ...
        

        【讨论】:

          猜你喜欢
          • 2015-05-03
          • 1970-01-01
          • 1970-01-01
          • 2014-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-19
          • 1970-01-01
          相关资源
          最近更新 更多