Python 如何在按下按钮时播放音频

Python 如何在按下按钮时播放音频,python,tkinter,Python,Tkinter,我在设置按下时播放音频的按钮时遇到问题。 我对按钮使用了tkinter,对音频使用了simpleudio x = "" def audio(file): x = file return x window = tk.Tk() window.title("Audio") audio_button = tk.Button(window,text="Audio Test",command=audio("imposter

我在设置按下时播放音频的按钮时遇到问题。 我对按钮使用了
tkinter
,对音频使用了
simpleudio

x = ""
def audio(file):
    x = file
    return x
window = tk.Tk()
window.title("Audio")
audio_button = tk.Button(window,text="Audio Test",command=audio("imposter")).pack(side="left")
audio_button1 = tk.Button(window,text="Audio Test Two",command=audio("crewmate")).pack(side="left")
stop_all = tk.Button(window,text="Stop All",command=audio("stop"),fg="red").pack(side="left")
tk.mainloop()
while True:
    if not x == "stop":
        if x == "crewmate":
            wave_obj = sa.WaveObject.from_wave_file("File here")
            play_obj = wave_obj.play()
            while play_obj.is_playing():
                if x == "stop":
                    break
                else:
                pass
        elif x == "imposter":
            wave_obj = sa.WaveObject.from_wave_file("File here")
            play_obj = wave_obj.play()
            while play_obj.is_playing():
                if x == "stop":
                    break
                else:
                    pass
    else:
        pass

如果代码也能稍微缩短一点,那就太好了。pack

pack
不返回任何值,因此,当您需要保留对小部件的引用时,应该将pack链接到小部件的创建

这里有一个可能的方法来解决你的问题;我没有简单的音频,所以我不能保证代码是完全正确的;带有
simpleaudio
调用的代码行将被注释掉,print语句允许您验证逻辑。您必须取消对它们的评论,然后再试一次

逻辑在启动新文件之前停止所有音频;您可能想让它更方便用户,比如如果命令请求相同的歌曲,就让歌曲结束,而不是重新启动它

# import simpleaudio as sa
import tkinter as tk

def stop_audio():
    print('stopping all')
#   sa.stopall()

def test_audio(state):
    if state == 'imposter':
        path = "path/to/imposter.wav"
    elif state == 'crewmate':
        path = "path/to/crewmate.wav"
    else:
        return
#     wave_obj = sa.WaveObject.from_wave_file(path)
    stop_audio()
#     play_obj = wave_obj.play()
    print(f'playing {state}')
    
window = tk.Tk()
window.title("Audio")

audio_button = tk.Button(window,text="Audio Test", command=lambda state='imposter': test_audio(state))
audio_button.pack(side="left")

audio_button1 = tk.Button(window,text="Audio Test Two", command=lambda state='crewmate': test_audio(state))
audio_button1.pack(side="left")

stop_all = tk.Button(window,text="Stop All",fg="red", command=stop_audio)
stop_all.pack(side="left")

tk.mainloop()

非常感谢。这真的很有帮助,因为我正在为万圣节准备一个音频节目。