python使用Tkinter实现在线音乐播放器


Posted in Python onJanuary 30, 2018

本文实例使用Tkinter实现在线音乐播放器的具体代码,供大家参考,具体内容如下

1.先使用Tkinter库写界面
2.写点击按钮触发的事件

(1).使用网易音乐的api,返回数据包装成json格式数据,解析数据
(2)涉及到多线程的问题未解决,一个软件默认打开一个线程,当播放歌曲时,显示界面就会卡掉,导致python停止工作

代码:

#coding=utf-8 
 
from Tkinter import * 
import tkMessageBox 
import urllib 
import json 
import mp3play 
import time 
 
musicList = [] 
 
#定义点击按钮响应的函数 
def music(): 
 #print "按钮点击" 
 #先判断用户是否在编辑框输入了内容 
 if E.get() == '': 
 #发出警告,需要先import tkMessageBox 
 tkMessageBox.showinfo("提示:","请先输入内容!") 
 #使用return,当满足前面的条件时,不在往下执行 
 return 
 #使用网易api,发送请求,需要import urllib 
 #报错,需要将汉字编码程ascii,才能添加到链接中 
 name = E.get().encode('utf-8') 
 name = urllib.quote(name) 
 html = urllib.urlopen('http://s.music.163.com/search/get/?type=1&s=%s&limit=9'%name).read() 
 #返回json格式数据,可用正则匹配需要数据,也可使用json.loads() 
 print html 
 #将返回文件转化为json格式,提取所需要的数据,需要import json 
 a = json.loads(html) 
 #print a 
 print a[u'result'][u'songs'][0][u'album'][u'name'] 
 #将所有结果显示在列表中 
 #print len(a[u'result'][u'songs'][0]) 
 for i in range(len(a[u'result'][u'songs'][0])): 
 #注意insert参数 
 LB.insert(i,a[u'result'][u'songs'][i][u'album'][u'name']+"("+a[u'result'][u'songs'][i][u'artists'][0][u'name']+")") 
 #先获取到歌曲url列表 
 musicList.append(a[u'result'][u'songs'][i][u'audio']) 
#定义双击列表响应函数 
 
def play(event): 
 #获取点击后返回的结果curselection() 
 #print LB.curselection()[0] 
 urlnum = LB.curselection()[0] 
 #不用流媒体播放,先下载下来再播放 
 # urllib.urlretrieve(musicList[urlnum],'1.mp3') 
 # #播放歌曲,调用import mp3play 
 # time.sleep(50) 
 clip = mp3play.load('1.mp3') 
 clip.play() 
 #设置播放时间import time 
 time.sleep(min(300, clip.seconds())) 
 #死机了,无法响应,因为线程的问题!!!!!! 
 #一个线程同一时间只能做一件事情,放歌时需再开一个线程 
 
#创建父窗口对象, 
top = Tk() 
#可以设置窗口的属性,如:标题,大小 
top.title("在线音乐播放器——张强") 
top.geometry('500x300+800+300') 
#创建编辑框,放到父窗口top上,用pack显示 
E = Entry(top) 
E.pack() 
#创建按钮,定义按钮触发的函数command 
B = Button(top,text="搜 索",command = music) 
B.pack() 
#定义列表的响应函数 
LB = Listbox(top,width = '50',listvariable = StringVar()) 
#绑定触发事件的方式-双击左键,和响应函数 
LB.bind('<Double-Button-1>',play) 
LB.pack()#要放到最后 
#定义标签 
label = Label(top,text = "欢迎使用!",fg = 'red') 
label.pack() 
#循环向windows发送消息,用于显示窗口 
top.mainloop()

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

Python 相关文章推荐
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python骚操作之动态定义函数
Mar 26 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python中必要的名词解释
Nov 20 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Tensorflow实现部分参数梯度更新操作
Jan 23 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python字典及字典基本操作方法详解
Jan 30 #Python
Python操作MySQL数据库的三种方法总结
Jan 30 #Python
python3.5 tkinter实现页面跳转
Jan 30 #Python
python 连接各类主流数据库的实例代码
Jan 30 #Python
python操作oracle的完整教程分享
Jan 30 #Python
Python使用wxPython实现计算器
Jan 30 #Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 #Python
You might like
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
Javascript开发包大全整理
2006/12/22 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
js实现日期级联效果
2014/01/23 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
js实现小时钟效果
2020/03/25 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python 调用HBase的简单实例
2016/12/18 Python
python实现弹窗祝福效果
2019/04/07 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python中最小二乘法详细讲解
2021/02/19 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
初婚未育证明
2014/01/15 职场文书
数学教育专业求职信
2014/07/22 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
倡议书作文
2015/01/19 职场文书
银行工作心得体会范文
2016/01/23 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android