Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2016 18:13:51

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

"Особый" ввод

Работа над моим убер-проектом подходит к концу. С вашей помощью решено уже много проблем, но новые продолжают возникать.
Мне нужно, что бы программа могла работать с клавиатурой. Идея такая: если нажать кнопку 1 - выполнить действие 1, если нажать кнопку 2 - выполнить действие 2, и так далее до 6 и с другими кнопками. При этом мне не хочется пользоваться input'ом, потому что я не хочу нажимать enter - это скажется на удобстве.
Сначала подумал пользоваться PyHook, потому что совсем недавно с ним игрался. Но понял, что использовать его как-то тупо, и вспомнил про то, как *очень давно* захватывал нажатия клавиш, именно в окне программы (в моём случае гуя нет, но тогда это работало и в командной строке). То ли с python for windows extensions, то ли ещё что-то - не помню.
Не подскажите?

Офлайн

#2 Дек. 14, 2016 19:08:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

"Особый" ввод

Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось

 # -*-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)    



Офлайн

#3 Дек. 16, 2016 16:30:31

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

"Особый" ввод

FishHook
Найдено когда-то на просторах сети, работает под линухом, под макосью не работает, под виндой не проверялось
Под виндой работает отлично, спасибо оогромное.
Это точно то, что мне нужно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version