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

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

【问题讨论】:

    标签: windows python-3.x button audio 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()
    

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

    1. pygame.mixer docs:

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

    1. 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中播放声音的信息。

      【讨论】:

        猜你喜欢
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多