2012-03-22 1 views
3

Можно ли использовать pygame для ввода ввода с консоли, вместо того, чтобы отображать отдельное окно для ввода? Я использую pygame для отслеживания того, как долго нажаты клавиши на клавиатуре.Чтение ввода в консоль с использованием pygame

Следующий код не работает (это просто минимальный пример, он фактически не уследить затраченное время):

pygame.init() 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      print event.key, 'pressed' 

Он не похож ни на событие Pygame поднимаются , Если добавить

screen = pygame.display.set_mode((640, 480)) 

После

pygame.init()

того события возникает, но у меня есть, что жуткое окно я не хочу иметь дело с.

Чтобы объяснить, почему я не хочу окна, я представляю, что это приложение является утилитой командной строки, поэтому я не могу этого сделать. Есть ли какая-либо функциональная причина, препятствующая запуску pygame в командной строке?

Спасибо!

EDIT: Я предположил, что проблема была в pygame.init(), и что мне нужно было только инициализировать модули ключей и событий. Согласно http://www.pygame.org/docs/tut/ImportInit.html мне следовало позвонить

pygame.key.init()
pygame.event.init()
, но это не сработало.

ответ

2

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

Если вы хотите создать приложение командной строки, попробуйте проклятий:

http://docs.python.org/library/curses.html

К сожалению, он работает только на Linux и Mac OS X.

+0

Но согласно [http: // stackoverflow.com/questions/4190544/detect-automatic-key-repeat-in-curses] (http://stackoverflow.com/questions/4190544/detect-automatic-key-repeats-in-curses), я не могу определить, если ключ удерживается или нет ... –

+0

@Sam Разве это не отдельная проблема? Зачем вам это нужно? – Mizipzor

+0

@mizipzor Я пытался создать программу для количественной оценки ввода с клавиатуры в ноты и длины для Lilypond. Таким образом, мне нужно знать, как долго пользователь удерживает ключ, чтобы я мог определить, какая длина ноты должна быть назначена. –

0

вход Консоль поставляется в через stdin, который pygame не готов к обработке. Не существует надежного способа получить сообщения о печати/выпуске через stdin, поскольку он зависит от того, что терминал отправляет его нажатиям клавиш.

0

Если вы просто не хотите окна какого-либо типа, вы можете использовать PyHook. Если вы просто хотите консольное приложение, получите вход пользователя со встроенной командой Python «raw_input (...)».

0

Попробуйте pygame.display.iconify(). Это скроет экран pygame, и вы все равно сможете обнаружить нажатия клавиш.

+0

попробовал, не работал. События клавиатуры не обнаружены. – ThePhi

1

Если вы просто сделать окно очень маленькое, используя

экран = pygame.display.set_mode ((1, 1))

вы не можете видеть это. Таким образом, вы попадаете в окно, но вы этого не замечаете.

Если вы щелкнете в любом месте, конечно, он перестает работать. Вам нужно щелкнуть по значку окна pygame, чтобы он снова работал.

+0

простой и рабочий. Благодарю. – ThePhi