热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python实现云播放_python实现简易云音乐播放器

本人最近在学习python,在看了一些教程后,用python写了一个简单的云音乐播放器,下面把主要代码贴上来,其中用到了gi

本人最近在学习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('',excute)

listbox.pack()

var1=StringVar()

label=Label(root,text="云音乐播放器",fg="purple",textvariable=var1)

var1.set("云音乐播放器")

label.pack()

root.mainloop()#显示窗口

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

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

时间: 2018-01-01



推荐阅读
author-avatar
RebeccaLd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有