按下 tkinter 按钮时如何播放声音?

Posted

技术标签:

【中文标题】按下 tkinter 按钮时如何播放声音?【英文标题】:How can I play a sound when a tkinter button is pushed? 【发布时间】:2015-05-01 23:34:49 【问题描述】:

我正在为 Windows PC 构建一个程序,它包含很多按钮并且看起来很简单。所以我想知道,当你按下按钮(使用 tkinter)时,我可以做到这一点,我可以播放声音来让程序活跃一点吗?请记住我正在学习,所以请稍微降低一点。

【问题讨论】:

【参考方案1】:

您也可以使用pygame。尽管比某些仅用于播放音乐的库慢,但它是跨平台的。

这是在基于 Tkinter 的应用程序中使用它的示例:

import tkinter as tk
from pygame import mixer


mixer.init()

def play_music():
    mixer.music.load("sample.ogg")
    mixer.music.play()
    
root = tk.Tk()
tk.Button(root, text="Play music", command=play_music).pack()
root.mainloop()

请务必牢记支持哪些声音格式。来自文档:

    pygame.mixer docs:

声音可以从 OGG 音频文件或未压缩的 WAV 加载。

    pygame.music docs:

请注意,MP3 支持是有限的。在某些系统上,不受支持的格式可能会使程序崩溃,例如Debian Linux。考虑改用 OGG。

【讨论】:

正确。您不必为此导入 all of pygame。有好几兆图形功能永远不会被触及。您可以只导入所需的混音器组件from pygame import mixer,然后将所有命令从pygame.mixer.init() 更改为简单地读取mixer.init() @Doyousketch2,谢谢你的回复。事实上,如果我们只需要pygame.mixer,就没有必要从pygame 导入所有模块。编辑了答案。【参考方案2】:

随便用

import os
os.system("play sound.mp3")

【讨论】:

【参考方案3】:

假设您的文件是 WAV:

from tkinter import *
from winsound import *

root = Tk() # create tkinter window

play = lambda: PlaySound('Sound.wav', SND_FILENAME)
button = Button(root, text = 'Play', command = play)

button.pack()
root.mainloop()

假设您的文件是 MP3:

from Tkinter import *
import mp3play

root = Tk() # create tkinter window

f = mp3play.load('Sound.mp3'); play = lambda: f.play()
button = Button(root, text = 'Play', command = play)

button.pack()
root.mainloop()

【讨论】:

mp3play 是否包含在默认的 python 库中,还是我必须 dl 它? 它在我的操作系统上不起作用,是我尝试在我的Linux系统中运行它时引发的错误 @RogerAlmengor 当然,它被提出了,因为 win 声音(和 mp3play,也是)仅适用于 Windows,它们不是跨平台的。为了让我的应用在更多操作系统上运行,我使用了 Pygame。【参考方案4】:

您首先需要将鼠标在图像上的点击与偶数处理程序联系起来,然后简单地定义一个 on_click 函数:

def on_click(event): 
    winsound.Beep('frequency', 'duration')

Here你可以找到更多关于在python中播放声音的信息。

【讨论】:

以上是关于按下 tkinter 按钮时如何播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

当我按下快速播放按钮时,声音播放失败

为啥按下按钮时无法播放声音?

在android soundpool中播放新声音时如何停止所有其他以前的声音?

Swift 2 + Xcode 7:按下错误按钮时播放声音

按下按钮时循环播放声音

按下按钮时播放随机声音[重复]