#python-3.x #pygame #pynput
#python-3.x #pygame #pynput
Вопрос:
Я использую модель ML, которая предсказывает жесты пальцев.Я пытаюсь имитировать событие нажатия клавиши в python, используя библиотеку pynput, и проверяю, все ли работает нормально.Но у меня есть другая программа, которая представляет собой игру, написанную на python с использованием библиотеки pygame, которая открывается в новом окне, но проблема в том, что управление нажатием клавиш не работает, но оно работает, когда я вручную нажимаю кнопки клавиатуры.
Комментарии:
1. PyGame использует SDL-библиотеку (простой DirectMedia Layer) и, вероятно, может использовать прямой доступ к системным событиям, поэтому он может работать на более низком уровне, чем pynput. Когда я вижу PyGame в обучении с подкреплением, он использует код, созданный только для обучения с подкреплением
2. Есть ли какой-либо способ выполнить симуляцию нажатия клавиши на более низком уровне.?
3. Есть ли какой-либо способ выполнить симуляцию нажатия клавиши на этом более низком уровне? Как насчет ctype?
Ответ №1:
В pygame вы можете добавлять события в очередь событий, выполнив:
newevent = pygame.event.Event(type, **attributes) #create the event
pygame.event.post(newevent) #add the event to the queue
Где type
— тип события (числовая константа) и **attributes
список атрибутов keyarg, также предопределенных констант.
Все эти константы определены в pygame.locals
модуле. документы pygame event docs и pygame key docs перечисляют их все.
Итак, если вы хотите имитировать нажатие клавиши «a», например, код будет:
newevent = pygame.event.Event(pygame.locals.KEYDOWN, unicode="a", key=pygame.locals.K_a, mod=pygame.locals.KMOD_NONE) #create the event
pygame.event.post(newevent) #add the event to the queue
KEYDOWN — это константа, соответствующая событию keydown.
unicode
это представление в Юникоде нажатой клавиши.
key
является константой, связанной с нажатой клавишей.
mod
является константой, представляющей модификатор (например, если кнопка нажата при нажатии SHIFT или CAPS_LOCK).
Надеюсь, это поможет.
Комментарии:
1. Будет ли это работать, если я смоделирую это в одной программе на python и прослушаю это событие в другой программе?
2. Этого я не знаю. Попробуйте (и дайте мне знать, мне тоже любопытно).
3. После выполнения приведенной выше команды в pygame, должна ли она печатать «a», если я открыл блокнот?
4. А, теперь я понимаю, чего ты хочешь. Нет, это не так просто. События Pygame должны прослушиваться событием прослушивателя pygame. Насколько я знаю, они не на уровне ОС. Для достижения этого потребуется перенаправление стандартного вывода на стандартный идентификатор другой программы или аналогичный трюк. Я думаю, что pygame не подходит для этого.
5. Я прослушиваю событие с помощью клавиш [pygame.K_a] …. но, похоже, это не работает. Как насчет библиотеки ctype
Ответ №2:
Я решил проблему, эмулируя событие нажатия клавиши с помощью клавиатуры. нажмите и прослушайте то же событие с помощью клавиатуры.Listner() оба присутствуют в библиотеке клавиатуры.Поэтому я не использовал функции pygame для прослушивания события. Спасибо всем за помощь.