Воспроизведение звука при нажатии клавиши в Python

Я пишу сценарий Python, в котором каждый раз при нажатии клавиши воспроизводится звук. Я использую модуль Winsound для воспроизведения звука, и мне нужно что-то вроде этого:

import winsound

while True:
    if any_key_is_being_pressed: # Replace this with an actual if statement.
        winsound.PlaySound("sound.wav", winsound.SND_ASYNC)

# rest of the script goes here...

Однако я не хочу, чтобы блок "While True" приостанавливал скрипт при его запуске. Я хочу, чтобы он работал в фоновом режиме и позволял скрипту выполняться, если это возможно даже в Python.

Возможно, я лаю не на то дерево, и мне не нужно время, правда; если есть способ воспроизводить звук при нажатии любой клавиши клавиатуры, то скажите, пожалуйста.

Спасибо.

2 ответа

Используйте модуль pynput.keyboard,

from pynput.keyboard import Key, Listener
import winsound

def on_press(key):
    winsound.PlaySound("sound.wav", winsound.SND_ASYNC)

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

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

import msvcrt, winsound

while True:
    if msvcrt.kbhit():   #Checks if any key is pressed
         winsound.PlaySound("sound.wav", winsound.SND_ASYNC) 

Если вы хотите выполнить свой код при определенном нажатии клавиши, этот код будет работать хорошо.

import keyboard  
""" using module keyboard please install before using this module 
    pip install keyboard
"""
while True:  
    try:  # used try so that if user pressed other than the given key error will not be shown
        if keyboard.is_pressed('a'):  # if key 'a' is pressed 
             winsound.PlaySound("sound.wav", winsound.SND_ASYNC)
            break  # finishing the loop
    except:
        break
Другие вопросы по тегам