本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了github上他人写的一个汉字转拼音的库,大家可以在github上找到。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#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的话,欢迎指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/wanlichangkong666/article/details/71742342