1

I've been trying to get keypresses to be detected in a Python program. I want to find a way to do this without using Tkinter, curses, or raw_input. Here's what I'm going at:

while True:
    if keypressed==1:
        print thekey

Does anyone know how this is possible?

Terry Jan Reedy
  • 18,414
  • 3
  • 40
  • 52
BoxTechy
  • 339
  • 2
  • 6
  • 16
  • `win32api.GetKeyState`. – Kevin Apr 11 '16 at 16:40
  • 2
    "I want to find a way to do this without using Tkinter, curses, or raw_input" - why not? What makes those tools undesirable? If we tell you how to do it with [tool X], are you going to say you want to figure out how to do it without [tool X] too? – user2357112 Apr 11 '16 at 16:43
  • Same as comment above, not necessary to reinvent the wheel every time – A. Romeu Apr 11 '16 at 16:52

2 Answers2

5

Python has a keyboard module with many features. Install it, perhaps with this command:

pip3 install keyboard

Then use it in code like:

import keyboard #Using module keyboard
while True:#making a loop
    try: #used try so that if user pressed other than the given key error will not be shown
        if keyboard.is_pressed('a'): #if key 'a' is pressed 
            print('You Pressed A Key!')
            break #finishing the loop
        else:
            pass
    except:
        break #if user pressed other than the given key the loop will break

You can set multiple Key Detection:

if keyboard.is_pressed('a') or keyboard.is_pressed('b') or keyboard.is_pressed('c'):
    #then do this
1

I took the liberty of editing your question slightly so it makes sense and has an answer, at least on Windows. (IDLE only interacts with your keyboard by means of the tkinter interface to tk.) On Windows, the answer is to use the msvcrt module's console io functions

import msvcrt as ms

while True:
    if ms.kbhit():
        print(ms.getch())

For other systems, you will have to find the equivalent system-specific calls. For posix systems, these may be part of curses, which you said you did not to use, but I do not know.

These functions do not work correctly when the program is run is run from IDLE in its default mode. The same may be true for other graphics-mode IDEs.

Terry Jan Reedy
  • 18,414
  • 3
  • 40
  • 52