python3音乐播放器简单实现代码


Posted in Python onApril 20, 2020

本文实例为大家分享了python3音乐播放器的关键代码,供大家参考,具体内容如下

from tkinter import *
from traceback import *
from win32com.client import Dispatch
import time,eyed3,threading
 
name = []
 
def openfile(index = [1]):
 global total,name
  
 filenames = filedialog.askopenfilenames(title = "音乐播放器",filetypes =[("mp3文件","*.mp3"),("WMA文件","*.wma"),("WAV文件","*.wav")])
 if filenames:
  for i in range(len(filenames)):
   media = wmp.newMedia(filenames[i])
   wmp.currentPlaylist.appendItem(media)
   
   print(filenames[i])
   
   coco = eyed3.load(filenames[i])#eyed3模块读取mp3信息
   total = int(coco.info.time_secs)
   minute = int(coco.info.time_secs)//60
   sec = int(coco.info.time_secs)%60
   length = int(coco.info.time_secs)
   
   name = filenames[i].split("/")
   
   i =index[-1]
   list_name.insert(END,str(i)+"."+name[-1])
   list_name.insert(END," "*6)
   if sec >=10:
    list_name.insert(END,"0%d:%d" %(minute,sec)+ "\n")
   else:
    list_name.insert(END,"0%s:0%d" %(minute,sec)+ "\n")
   i = i +1
   index.append(i)
def play(event = None):
 #root.title("%s" % name[-1]),使用wmp.currentMedia.name更好,在per函数中
 per_thread = threading.Thread(target = per)
 per_thread.daemnon = True
 wmp.controls.play()
 per_thread.start()
 #print(wmp.currentMedia.duration)#放到暂停那里居然可以用,而这里不行
 
  
def per():
 global total
 while wmp.playState !=1:
  progress_scal.set(int(wmp.controls.currentPosition))
  progress_scal.config(label = wmp.controls.currentPositionString)
  progress_scal.config(to = total,tickinterval = 50)
  time.sleep(1)
  root.title("%s" % wmp.currentMedia.name)
  
def stop():
 wmp.controls.stop()
def pause(event = None):
 wmp.controls.pause()
 
def uselist():
  pass
def fullscr():
  pass
def exitit():
 root.destroy()
def Previous_it():
 wmp.controls.previous()
def Next_it():
 wmp.controls.next()
def Volume_ctr(none):
 wmp.settings.Volume = vio_scale.get()
def Volume_add(i=[0]):
 wmp.settings.Volume =wmp.settings.Volume+5
 i.append(wmp.settings.Volume)
 vio_scale.set(wmp.settings.Volume)
def Volume_minus(i=[0]):
 wmp.settings.Volume = wmp.settings.Volume -5
 i.append(wmp.settings.Volume)
 vio_scale.set(wmp.settings.Volume)
def Scale_ctr(none):
 
 wmp.controls.currentPosition = var_scale.get()
 print(wmp.currentMedia.duration)
def Clear_list():
 wmp.currentPlaylist.clear()
 list_name.delete(1.0,END)
 name = []
 index = []
def List_random():
 wmp.settings.setMode("shuffle",True)
 play()
def List_loop():
 wmp.settings.setMode("loop",True)
 play()
  
root =Tk()
wmp = Dispatch("WMPlayer.OCX")
 
canvas = Canvas(root,width =150,height = 100,bg = "blue")
filename = PhotoImage(file = "girl.gif")
image =canvas.create_image((0,0),image = filename)
canvas.place(x=0,y=0)
canvas.coords(image,79,50)
canvas.grid(row =0,column = 0,sticky = "nw",rowspan =2)
 
 
progress_lab = LabelFrame(root,text = "播放进度")
progress_lab.grid(row =2,column =0,sticky = "we",rowspan = 2)
var_scale = DoubleVar()
progress_scal = Scale(progress_lab,orient = HORIZONTAL,showvalue = 0,length =180,variable = var_scale)
#progress_scal.bind("<Button-1>",pause)
#progress_scal.bind("")
#progress_scal.bind("<ButtonRelease-1>",play)
progress_scal.grid(row =3,column =0)
 
modee_lab = LabelFrame(root,text = "播放模式")
modee_lab.grid(row =4,column =0,rowspan =4,sticky = "ws")
var_mode = IntVar()
randomradio = Radiobutton(modee_lab,variable = var_mode,value = 1,text ="随机播放",command =List_random )
randomradio.grid(row =4,column =2)
inturnradio = Radiobutton(modee_lab,variable = var_mode,value =2,text= "顺序播放",command = play)
inturnradio.grid(row=4,column =3)
alloop = Radiobutton(modee_lab,variable = var_mode,value =2,text = "全部循环播放",command = List_loop)
alloop.grid(row =5,column = 2)
sinloop = Radiobutton(modee_lab,variable = var_mode,value =3,text = "单曲循环播放")
sinloop.grid(row =5,column =3)
previous_play = Button(modee_lab,text = "上一曲",height =1,command = Previous_it)
previous_play.grid(row =6,column =2,rowspan =2,pady =5)
next_play = Button(modee_lab,text = "下一曲",height =1,command = Next_it)
next_play.grid(row =6,column =3,rowspan =2,pady =5)
 
var_volume = IntVar()
vioce_lab = LabelFrame(root,text = "音量控制")
vioce_lab.grid(row =8,column =0,sticky = "wes")
vio_scale = Scale(vioce_lab,orient = HORIZONTAL,length =170,variable = var_volume,command =Volume_ctr)
vio_scale.set(30)
vio_scale.grid(row =8,column =0)
vio_plus = Button(vioce_lab,width =8,text = "增加音量+",command =Volume_add)
vio_plus.grid(row =9,column =0,sticky = "w")
vio_minus = Button(vioce_lab,width =8,text ="减少音量-",command = Volume_minus)
vio_minus.grid(row =9,column =0,sticky ="e")
 
ctr_lab = LabelFrame(root,text = "播放控制",height =130)
ctr_lab.grid(row =0,column =1,rowspan =12,sticky = "ns")
btn_open = Button(ctr_lab,text ="打开音乐文件",width =10,command = openfile)
btn_open.grid(row=0,column =1)
btn_play = Button(ctr_lab,text ="播放",width =10,command = play)
btn_play.grid(row =1,column =1,pady =5)
btn_stop = Button(ctr_lab,text ="停止",width =10,command = stop)
btn_stop.grid(row =2,column =1,pady =5)
btn_pause = Button(ctr_lab,text ="暂停",width =10,command = pause)
btn_pause.grid(row =3,column =1,pady =5)
 
btn_playlist = Button(ctr_lab,text ="新建播放列表",width =10,command = uselist)
btn_playlist.grid(row =4,column =1,pady =5)
 
 
listimport = Button(ctr_lab,width =10,text = "导入列表")
listimport.grid(row =6,column =1,sticky ="nw",pady =5)
listexport = Button(ctr_lab,width =10,text = "导出列表")
listexport.grid(row =7,column =1,sticky = "nw",pady =5)
listdel_all = Button(ctr_lab,width =10,text = "清空列表",command = Clear_list)
listdel_all.grid(row =8,column =1,sticky ="nw",pady =5)
listdel_sel= Button(ctr_lab,width =10,text = "删除歌曲")
listdel_sel.grid(row =12,column =1,sticky = "nw",pady =5)
savelist_btn = Button(ctr_lab,text = "保存为列表")
savelist_btn.grid(row=9,column =1)
min_btn = Button(ctr_lab,text = "最小化窗口",command = root.iconify)
min_btn.grid(row =13,column =1)
 
time_lab= Label(root,width =20,height =2,text ="现在时间为:")
time_lab.grid(row =12,column =0,sticky = "nw",pady =5)
time_text= Text(root,width =30,height =3,foreground ="green")
time_text.grid(row =10,column =0,sticky = "nw",pady =5)
 
list_name = Text(root,height =18,width =110)
list_name.grid(row =0,column =2,sticky = "n",rowspan =6)
 
 
root.mainloop()

以上就是本文的全部内容,希望对大家学习python程序设计有所帮助。

Python 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
python回调函数的使用方法
Jan 23 Python
Python解析树及树的遍历
Feb 03 Python
Python使用PIL库实现验证码图片的方法
Mar 11 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
python爬虫添加请求头代码实例
Dec 28 Python
python 函数中的参数类型
Feb 11 Python
Python中socket网络通信是干嘛的
May 27 Python
Keras实现DenseNet结构操作
Jul 06 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
使用python3.5仿微软记事本notepad
Jun 15 #Python
python3.5仿微软计算器程序
Mar 30 #Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 #Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 #Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 #Python
浅谈python新手中常见的疑惑及解答
Jun 14 #Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 #Python
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
正则表达式语法
2006/10/09 Javascript
使用php自动备份数据库表的实现方法
2017/07/28 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
js数组操作学习总结
2013/11/04 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
babel基本使用详解
2017/02/17 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
浅谈python字符串方法的简单使用
2016/07/18 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
群众路线批评与自我批评
2014/02/06 职场文书
小学语文课后反思精选
2014/04/25 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
担保书格式
2015/01/20 职场文书
小组组名及励志口号
2015/12/24 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript