2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

基于Python+tkinter+pygame的音乐播放器完整源码

时间:12-25来源:作者:点击数:17

基于Python+tkinter+pygame的音乐播放器完整源码

  • import os
  • import tkinter
  • import tkinter.filedialog
  • import random
  • import time
  • import threading
  • import pygame
  • folder = ''
  • def play():
  • # folder用来表示存放MP3音乐文件的文件夹
  • global folder
  • musics = [folder+'\\'+music
  • for music in os.listdir(folder) \
  • if music.endswith(('.mp3', '.wav', '.ogg'))]
  • # 初始化混音器设备
  • pygame.mixer.init()
  • while playing:
  • if not pygame.mixer.music.get_busy():
  • # 随机播放一首歌曲
  • nextMusic = random.choice(musics)
  • pygame.mixer.music.load(nextMusic.encode())
  • # 播放一次
  • pygame.mixer.music.play(1)
  • musicName.set('playing....'+nextMusic)
  • else:
  • time.sleep(0.3)
  • root = tkinter.Tk()
  • root.title('音乐播放器v1.0---董付国')
  • root.geometry('280x70+400+300')
  • root.resizable(False, False)
  • # 关闭程序时执行的代码
  • def closeWindow():
  • # 修改变量,结束线程中的循环
  • global playing
  • playing = False
  • time.sleep(0.3)
  • try:
  • # 停止播放,如果已停止,
  • # 再次停止时会抛出异常,所以放在异常处理结构中
  • pygame.mixer.music.stop()
  • pygame.mixer.quit()
  • except:
  • pass
  • root.destroy()
  • root.protocol('WM_DELETE_WINDOW', closeWindow)
  • pause_resume = tkinter.StringVar(root, value='NotSet')
  • playing = False
  • # 播放按钮
  • def buttonPlayClick():
  • # 选择要播放的音乐文件夹
  • global folder
  • if not folder:
  • folder = tkinter.filedialog.askdirectory()
  • if not folder:
  • return
  • global playing
  • playing = True
  • # 创建一个线程来播放音乐,当前主线程用来接收用户操作
  • t = threading.Thread(target=play)
  • t.start()
  • # 根据情况禁用和启用相应的按钮
  • buttonPlay['state'] = 'disabled'
  • buttonStop['state'] = 'normal'
  • buttonPause['state'] = 'normal'
  • buttonNext['state'] = 'normal'
  • pause_resume.set('Pause')
  • buttonPlay = tkinter.Button(root,
  • text='Play',
  • command=buttonPlayClick)
  • buttonPlay.place(x=20, y=10, width=50, height=20)
  • # 停止按钮
  • def buttonStopClick():
  • global playing
  • playing = False
  • pygame.mixer.music.stop()
  • musicName.set('暂时没有播放音乐')
  • buttonPlay['state'] = 'normal'
  • buttonStop['state'] = 'disabled'
  • buttonPause['state'] = 'disabled'
  • buttonNext['state'] = 'disabled'
  • global folder
  • folder = ''
  • buttonStop = tkinter.Button(root,
  • text='Stop',
  • command=buttonStopClick)
  • buttonStop.place(x=80, y=10, width=50, height=20)
  • buttonStop['state'] = 'disabled'
  • # 暂停与恢复,两个功能共用一个按钮
  • def buttonPauseClick():
  • if pause_resume.get() == 'Pause':
  • pygame.mixer.music.pause()
  • pause_resume.set('Resume')
  • elif pause_resume.get() == 'Resume':
  • pygame.mixer.music.unpause()
  • pause_resume.set('Pause')
  • buttonPause = tkinter.Button(root,
  • textvariable=pause_resume,
  • command=buttonPauseClick)
  • buttonPause.place(x=140, y=10, width=50, height=20)
  • buttonPause['state'] = 'disabled'
  • # 下一首音乐
  • def buttonNextClick():
  • global playing
  • playing = False
  • pygame.mixer.music.stop()
  • pygame.mixer.quit()
  • buttonPlayClick()
  • buttonNext = tkinter.Button(root,
  • text='Next',
  • command=buttonNextClick)
  • buttonNext.place(x=200, y=10, width=50, height=20)
  • buttonNext['state'] = 'disabled'
  • musicName = tkinter.StringVar(root,
  • value='暂时没有播放音乐...')
  • labelName = tkinter.Label(root,
  • textvariable=musicName)
  • labelName.place(x=0, y=40, width=270, height=20)
  • # 启动消息循环
  • root.mainloop()

运行效果图:

初始状态

播放状态

暂停状态

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门