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 相关文章推荐
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
学习python 之编写简单乘法运算题
Feb 27 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 Python
Python Logging 日志记录入门学习
Jun 02 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
对Python3使运行暂停的方法详解
Feb 18 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
python实现人工蜂群算法
Sep 18 Python
python 实现图片裁剪小工具
Feb 02 Python
浅析Python模块之间的相互引用问题
Feb 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
全国中波电台频率表
2020/03/11 无线电
PHP Token(令牌)设计
2008/03/15 PHP
PHP Pear 安装及使用
2009/03/19 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
php json转换相关知识(小结)
2018/12/21 PHP
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
关于python的list相关知识(推荐)
2017/08/30 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python 表格打印代码实例解析
2019/10/12 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python 文件数据读写的具体实现
2020/01/24 Python
Python 实现一个计时器
2020/07/28 Python
python 写一个文件分发小程序
2020/12/05 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
送餐员岗位职责范本
2014/02/21 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
金融事务专业求职信
2014/04/25 职场文书
五年级作文之成长
2019/09/16 职场文书
vue elementUI表格控制对应列
2022/04/13 Vue.js
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL