Распознавание клавиатуры в реальном времени? [Дубликат]

У меня есть другая перспектива ответить на это.

При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.

public class MyController
{
    private ServiceA serviceA;
    private ServiceB serviceB;

    public MyController(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public void MyMethod()
    {
        // We don't need to check null because the dependency injection container 
        // injects it, provided you took care of bootstrapping it.
        var someObject = serviceA.DoThis();
    }
}
17
задан Somebody still uses you MS-DOS 19 August 2010 в 17:15
поделиться

6 ответов

В Windows вам нужен модуль msvcrt, в частности, похоже, что вы описываете свою проблему, функция msvcrt.getch :

Читать нажмите клавишу и верните полученный символ. На консоль ничего не отозвалось. Этот вызов будет блокироваться, если нажатие клавиши еще не доступно, но не будет ждать нажатия Enter.

(и т. Д. - см. Документы, на которые я только что указал). Для Unix см., Например, этот рецепт для простого способа построения аналогичной функции getch (см. также несколько альтернатив & amp; c в потоке комментариев этого рецепта).

14
ответ дан Alex Martelli 24 August 2018 в 03:30
поделиться

Чтобы получить один символ, я использовал getch , но я не знаю, работает ли он в Windows.

2
ответ дан Derek Kurth 24 August 2018 в 03:30
поделиться

Вместо модуля msvcrt вы также можете использовать WConio :

>>> import WConio
>>> ans = WConio.getkey()
>>> ans
'y'
3
ответ дан John Howard 24 August 2018 в 03:30
поделиться

На боковой ноте msvcrt.kbhit () возвращает логическое значение, определяющее, нажата ли в данный момент клавиша на клавиатуре.

Итак, если вы делаете игру или что-то еще и хотите, чтобы нажатия клавиш делали что-то, но не останавливали игру целиком, вы можете использовать kbhit () внутри оператора if, чтобы убедиться, что ключ только извлекается, если пользователь действительно хочет что-то сделать.

Пример в Python 3:

# this would be in some kind of check_input function
if msvcrt.kbhit():
    key = msvcrt.getch().decode("utf-8").lower() # getch() returns bytes data that we need to decode in order to read properly. i also forced lowercase which is optional but recommended
    if key == "w": # here 'w' is used as an example
        # do stuff
    elif key == "a":
        # do other stuff
    elif key == "j":
        # you get the point
1
ответ дан Nytra 24 August 2018 в 03:30
поделиться

Python не предоставляет многоплатформенное решение из коробки. Если вы находитесь в Windows, вы можете попробовать msvcrt с помощью:

import msvcrt
print 'Press s or n to continue:\n'
input_char = msvcrt.getch()
if input_char.upper() == 'S': 
   print 'YES'
9
ответ дан systempuntoout 24 August 2018 в 03:30
поделиться

curses могут сделать это также:

import curses, time

#--------------------------------------
def input_char(message):
    try:
        win = curses.initscr()
        win.addstr(0, 0, message)
        while True: 
            ch = win.getch()
            if ch in range(32, 127): break
            time.sleep(0.05)
    except: raise
    finally:
        curses.endwin()
    return chr(ch)
#--------------------------------------
c = input_char('Press s or n to continue:')
if c.upper() == 'S':
    print 'YES'
3
ответ дан user2660966 24 August 2018 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: