Форум сайта python.su
0
Работа над моим убер-проектом подходит к концу. С вашей помощью решено уже много проблем, но новые продолжают возникать.
Мне нужно, что бы программа могла работать с клавиатурой. Идея такая: если нажать кнопку 1 - выполнить действие 1, если нажать кнопку 2 - выполнить действие 2, и так далее до 6 и с другими кнопками. При этом мне не хочется пользоваться input'ом, потому что я не хочу нажимать enter - это скажется на удобстве.
Сначала подумал пользоваться PyHook, потому что совсем недавно с ним игрался. Но понял, что использовать его как-то тупо, и вспомнил про то, как *очень давно* захватывал нажатия клавиш, именно в окне программы (в моём случае гуя нет, но тогда это работало и в командной строке). То ли с python for windows extensions, то ли ещё что-то - не помню.
Не подскажите?
Офлайн
568
Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось
# -*-coding:utf-8-*- class _Getch: """Gets a single character from standard input. Does not echo to the screen.""" def __init__(self): try: self.impl = _GetchWindows() except ImportError: self.impl = _GetchUnix() def __call__(self): return self.impl() class _GetchUnix: def __init__(self): import tty, sys def __call__(self): import sys, tty, termios fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return ch class _GetchWindows: def __init__(self): import msvcrt def __call__(self): import msvcrt return msvcrt.getch() getch = _Getch() import sys while True: i = getch() try: i = int(i) except: pass else: if i < 6: print("You enter", i) else: sys.exit(0)
Офлайн
0
FishHookПод виндой работает отлично, спасибо оогромное.
Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось
Офлайн