BearPro
Дек. 14, 2016 18:13:51
Работа над моим убер-проектом подходит к концу. С вашей помощью решено уже много проблем, но новые продолжают возникать.
Мне нужно, что бы программа могла работать с клавиатурой. Идея такая: если нажать кнопку 1 - выполнить действие 1, если нажать кнопку 2 - выполнить действие 2, и так далее до 6 и с другими кнопками. При этом мне не хочется пользоваться input'ом, потому что я не хочу нажимать enter - это скажется на удобстве.
Сначала подумал пользоваться PyHook, потому что совсем недавно с ним игрался. Но понял, что использовать его как-то тупо, и вспомнил про то, как *очень давно* захватывал нажатия клавиш, именно в окне программы (в моём случае гуя нет, но тогда это работало и в командной строке). То ли с python for windows extensions, то ли ещё что-то - не помню.
Не подскажите?
FishHook
Дек. 14, 2016 19:08:55
Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось
# -*-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)
BearPro
Дек. 16, 2016 16:30:31
FishHook
Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось
Под виндой работает отлично, спасибо оогромное.
Это точно то, что мне нужно.