今天程序需要利用键盘的上下左右键信息,于是网上搜索了一番。结果不是效果不佳,就是依赖的库不方便安装,最终利用的是curses这个python自带的库,python2和python3都支持。简单的使用及键盘输入效果如下图。
import curses
def main(stdscr):
while True:
# getch()这个函数会阻塞,等待键盘输入
# 如果不希望阻塞,可以使用多线程
# 不同的键有不同的keycode
keycode = stdscr.getch()
if keycode == curses.KEY_UP:
print(' up ', keycode)
elif keycode == curses.KEY_DOWN:
print(' down ', keycode)
elif keycode == curses.KEY_LEFT:
print(' left ', keycode)
elif keycode == curses.KEY_RIGHT:
print(' right ', keycode)
elif keycode == ord('q'):
break
if __name__ == '__main__':
curses.wrapper(main)
上图输出的信息表明我们可以获取键盘的输入,但是信息的输出格式有点不舒服,于是搜索了print输出不换行的设置,一般搜索的都是在print函数中指定end=‘’,如print('msg', end='')。但是这样,内容不是立即输出,是所有内容最后一起输出。
后来找到可以不用print,使用sys这个库的sys.stdout.write输出,然后再使用sys.stdout.flush(),代码和效果如下图。
import sys
import curses
def main(stdscr):
while True:
keycode = stdscr.getch()
if keycode == curses.KEY_UP:
sys.stdout.write(' up ')
elif keycode == curses.KEY_DOWN:
sys.stdout.write(' down ')
elif keycode == curses.KEY_LEFT:
sys.stdout.write(' left ')
elif keycode == curses.KEY_RIGHT:
sys.stdout.write(' right ')
elif keycode == ord('q'):
break
sys.stdout.flush()
if __name__ == '__main__':
curses.wrapper(main)
|