首页 > 编程 > Python > 正文

python实现简易云音乐播放器

2019-11-25 15:25:22
字体:
来源:转载
供稿:网友

本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写的一个汉字转拼音的库,大家可以在github上找到。

#coding=utf-8 from Tkinter import * import tkMessageBox import urllib import json import mp3play import time import threading from pinyin import PinYin import os import stat test = PinYin() test.load_word() stop=0 def music():   if not entry.get():     tkMessageBox.showinfo("温馨提示","搜索内容不能为空")     return   name = test.hanzi2pinyin_split(entry.get())   html=urllib.urlopen("http://s.music.163.com/search/get/?type=1&s=%s&limit=9"%name).read()   js=json.loads(html)   n = 0   global x   x = []   for i in js['result']['songs']:     listbox.insert(n,'%s(%s)'%(i['name'],i['artists'][0]['name']))     n+=1     x.append(i['audio']) count = 0 #isplaying = None def play():   global count   count += 1   index=listbox.curselection()   var1.set(u"正在加载"+listbox.get(index,last=None))   urllib.urlretrieve(x[index[0]],'tmp%s.mp3'%str(count))   var1.set(u"正在播放"+listbox.get(index,last=None))   mp3=mp3play.load("tmp%s.mp3"%str(count))   mp3.play()   time.sleep(mp3.seconds())  import inspect import ctypes  def _async_raise(tid, exctype):   """raises the exception, performs cleanup if needed"""   tid = ctypes.c_long(tid)   if not inspect.isclass(exctype):     exctype = type(exctype)   res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))   if res == 0:     raise ValueError("invalid thread id")   elif res != 1:     ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)     raise SystemError("PyThreadState_SetAsyncExc failed")  def stop_thread(thread):   _async_raise(thread.ident, SystemExit) threads=list() t=None def excute(event):   global t   for i in threads:     stop_thread(i)   t = threading.Thread(target=play)   t.setDaemon(True)   t.start()   threads.append(t) root = Tk()#创建一个窗口 root.title("云音乐") root.geometry("500x300+500+200") entry=Entry(root)#创建输入框(单行),置父 entry.pack() btn=Button(root,text="搜 索",command=music) btn.pack()#布局方式必须用同一种 var=StringVar() listbox=Listbox(root,width=50,listvariable=var) listbox.bind('<Double-Button-1>',excute) listbox.pack() var1=StringVar() label=Label(root,text="云音乐播放器",fg="purple",textvariable=var1) var1.set("云音乐播放器") label.pack() root.mainloop()#显示窗口

由于最近事情较多加上我的技术还不到位,这个播放器有一个BUG我还没有解决,就是在选择播放第二首歌时,第一首歌不会停止。如果有小伙伴解决了这个BUG的话,欢迎指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表