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

 更新时间:2020年04月20日 11:26:27   作者:jinx88  
这篇文章主要为大家详细介绍了python3音乐播放器简单实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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实现各进制转换的总结大全

    这篇文章主要给大家总结了python实现各进制转换的相关资料,其中包括字符串与十六进制转换、内置函数hex()与进制互转等相关内容,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-06-06
  • Python3批量移动指定文件到指定文件夹方法示例

    Python3批量移动指定文件到指定文件夹方法示例

    这篇文章主要给大家介绍了关于Python3批量移动指定文件到指定文件夹的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python3具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Python常用数据类型之列表使用详解

    Python常用数据类型之列表使用详解

    列表是Python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型。本文将通过示例详细讲解列表的使用,需要的可以参考一下
    2022-04-04
  • Python多进程池 multiprocessing Pool用法示例

    Python多进程池 multiprocessing Pool用法示例

    这篇文章主要介绍了Python多进程池 multiprocessing Pool用法,结合实例形式分析了多进程池 multiprocessing Pool相关概念、原理及简单使用技巧,需要的朋友可以参考下
    2018-09-09
  • python中的正则表达式,贪婪匹配与非贪婪匹配方式

    python中的正则表达式,贪婪匹配与非贪婪匹配方式

    这篇文章主要介绍了python中的正则表达式,贪婪匹配与非贪婪匹配方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 分享Python 的24个编程超好用技巧

    分享Python 的24个编程超好用技巧

    这篇文章主要给大家分享Python 的24个编程超好用技巧,下面分享一些python技巧和 tips,这些技巧将根据其首字母按 A-Z 的顺序进行展示,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • python三引号如何输入

    python三引号如何输入

    在本篇文章里小编给大家整理的是关于python三引号输入方法及相关实例,需要的朋友们可以学习下。
    2020-07-07
  • 使用Flask获取请求参数的方式总结

    使用Flask获取请求参数的方式总结

    在 Flask 中,可以从 request 对象中获取各种类型的参数,这篇文章为大家整理了一些常见的获取参数的方式及示例代码,感兴趣的小伙伴可以参考一下
    2025-04-04
  • Python如何读取、写入CSV数据

    Python如何读取、写入CSV数据

    这篇文章主要介绍了Python如何读写CSV数据,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • python threading模块的使用指南

    python threading模块的使用指南

    python的thread模块是底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。本文详细的讲述了threading模块的用法
    2021-06-06

最新评论