python實現(xiàn)簡易云音樂播放器
更新時間:2018年01月04日 09:46:07 作者:wanlichangkong666
這篇文章主要介紹了python實現(xiàn)簡易云音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本人最近在學習python,在看了一些教程后,用python寫了一個簡單的云音樂播放器,下面把主要代碼貼上來,其中用到了github上他人寫的一個漢字轉(zhuǎn)拼音的庫,大家可以在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("溫馨提示","搜索內(nèi)容不能為空")
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()#創(chuàng)建一個窗口
root.title("云音樂")
root.geometry("500x300+500+200")
entry=Entry(root)#創(chuàng)建輸入框(單行),置父
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()#顯示窗口
由于最近事情較多加上我的技術(shù)還不到位,這個播放器有一個BUG我還沒有解決,就是在選擇播放第二首歌時,第一首歌不會停止。如果有小伙伴解決了這個BUG的話,歡迎指正。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
DJANGO-ALLAUTH社交用戶系統(tǒng)的安裝配置
django-allauth是集成了local用戶系統(tǒng)和social用戶系統(tǒng),其social用戶系統(tǒng)可以掛載多個賬戶。也是一個流行度非常高的Django user系統(tǒng),我們這里簡單介紹下,分享下個人的使用經(jīng)驗2014-11-11
Python如何使用__slots__實現(xiàn)節(jié)省內(nèi)存和性能優(yōu)化
你有想過,一個小小的 __slots__ 能讓你的 Python 類內(nèi)存消耗直接減半嗎,沒錯,今天咱們要聊的就是這個讓人眼前一亮的技巧,感興趣的小伙伴可以了解下2025-03-03
Python?wxPython庫實現(xiàn)文本框與按鈕交互
在Python的圖形用戶界面(GUI)開發(fā)中,wxPython是一個功能強大的庫,本文主要為大家介紹了如何使用wxPython庫實現(xiàn)文本框與按鈕交互,需要的可以了解下2025-01-01

