本人最近在学习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