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

1073次阅读  |  发布于5年以前

本文实例为大家分享了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程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8