python使用Tkinter實(shí)現(xiàn)在線音樂播放器
本文實(shí)例使用Tkinter實(shí)現(xiàn)在線音樂播放器的具體代碼,供大家參考,具體內(nèi)容如下
1.先使用Tkinter庫寫界面
2.寫點(diǎn)擊按鈕觸發(fā)的事件
(1).使用網(wǎng)易音樂的api,返回?cái)?shù)據(jù)包裝成json格式數(shù)據(jù),解析數(shù)據(jù)
(2)涉及到多線程的問題未解決,一個(gè)軟件默認(rèn)打開一個(gè)線程,當(dāng)播放歌曲時(shí),顯示界面就會(huì)卡掉,導(dǎo)致python停止工作
代碼:
#coding=utf-8
from Tkinter import *
import tkMessageBox
import urllib
import json
import mp3play
import time
musicList = []
#定義點(diǎn)擊按鈕響應(yīng)的函數(shù)
def music():
#print "按鈕點(diǎn)擊"
#先判斷用戶是否在編輯框輸入了內(nèi)容
if E.get() == '':
#發(fā)出警告,需要先import tkMessageBox
tkMessageBox.showinfo("提示:","請(qǐng)先輸入內(nèi)容!")
#使用return,當(dāng)滿足前面的條件時(shí),不在往下執(zhí)行
return
#使用網(wǎng)易api,發(fā)送請(qǐng)求,需要import urllib
#報(bào)錯(cuò),需要將漢字編碼程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格式數(shù)據(jù),可用正則匹配需要數(shù)據(jù),也可使用json.loads()
print html
#將返回文件轉(zhuǎn)化為json格式,提取所需要的數(shù)據(jù),需要import json
a = json.loads(html)
#print a
print a[u'result'][u'songs'][0][u'album'][u'name']
#將所有結(jié)果顯示在列表中
#print len(a[u'result'][u'songs'][0])
for i in range(len(a[u'result'][u'songs'][0])):
#注意insert參數(shù)
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'])
#定義雙擊列表響應(yīng)函數(shù)
def play(event):
#獲取點(diǎn)擊后返回的結(jié)果curselection()
#print LB.curselection()[0]
urlnum = LB.curselection()[0]
#不用流媒體播放,先下載下來再播放
# urllib.urlretrieve(musicList[urlnum],'1.mp3')
# #播放歌曲,調(diào)用import mp3play
# time.sleep(50)
clip = mp3play.load('1.mp3')
clip.play()
#設(shè)置播放時(shí)間import time
time.sleep(min(300, clip.seconds()))
#死機(jī)了,無法響應(yīng),因?yàn)榫€程的問題?。。。。?!
#一個(gè)線程同一時(shí)間只能做一件事情,放歌時(shí)需再開一個(gè)線程
#創(chuàng)建父窗口對(duì)象,
top = Tk()
#可以設(shè)置窗口的屬性,如:標(biāo)題,大小
top.title("在線音樂播放器——張強(qiáng)")
top.geometry('500x300+800+300')
#創(chuàng)建編輯框,放到父窗口top上,用pack顯示
E = Entry(top)
E.pack()
#創(chuàng)建按鈕,定義按鈕觸發(fā)的函數(shù)command
B = Button(top,text="搜 索",command = music)
B.pack()
#定義列表的響應(yīng)函數(shù)
LB = Listbox(top,width = '50',listvariable = StringVar())
#綁定觸發(fā)事件的方式-雙擊左鍵,和響應(yīng)函數(shù)
LB.bind('<Double-Button-1>',play)
LB.pack()#要放到最后
#定義標(biāo)簽
label = Label(top,text = "歡迎使用!",fg = 'red')
label.pack()
#循環(huán)向windows發(fā)送消息,用于顯示窗口
top.mainloop()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 制作簡(jiǎn)單的音樂播放器
- 基于python實(shí)現(xiàn)音樂播放器代碼實(shí)例
- python實(shí)現(xiàn)可下載音樂的音樂播放器
- python實(shí)現(xiàn)音樂播放器 python實(shí)現(xiàn)花框音樂盒子
- Python使用PyQt5/PySide2編寫一個(gè)極簡(jiǎn)的音樂播放器功能
- Python調(diào)用Windows API函數(shù)編寫錄音機(jī)和音樂播放器功能
- python實(shí)現(xiàn)簡(jiǎn)易云音樂播放器
- Python實(shí)現(xiàn)在線音樂播放器
- python開發(fā)簡(jiǎn)易版在線音樂播放器
- python3音樂播放器簡(jiǎn)單實(shí)現(xiàn)代碼
- Python趣味挑戰(zhàn)之實(shí)現(xiàn)簡(jiǎn)易版音樂播放器
相關(guān)文章
淺談flask截獲所有訪問及before/after_request修飾器
這篇文章主要介紹了淺談flask截獲所有訪問及before/after_request修飾器,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
selenium常用API的使用過程記錄(包括自動(dòng)登錄)
selenium是一個(gè)自動(dòng)測(cè)試工具,它可以幫我通過代碼去實(shí)現(xiàn)驅(qū)動(dòng)瀏覽器自動(dòng)執(zhí)行相應(yīng)的操作,所以我們也可以用它來做爬蟲,主要使用selenium的目的是為了跳過登錄驗(yàn)證,這篇文章主要介紹了selenium的使用過程記錄,已經(jīng)常用API接口(包括自動(dòng)登錄)2024-02-02
Python Mysql數(shù)據(jù)庫操作 Perl操作Mysql數(shù)據(jù)庫
python對(duì)mysql數(shù)據(jù)庫的一些操作實(shí)現(xiàn)代碼2009-01-01
基于Python實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器詳解
所謂定時(shí)器,是指間隔特定時(shí)間執(zhí)行特定任務(wù)的機(jī)制。幾乎所有的編程語言,都有定時(shí)器的實(shí)現(xiàn)。這篇文章主要介紹的是通過Python實(shí)現(xiàn)的定時(shí)器,感興趣的可以跟隨小編學(xué)習(xí)一下2021-12-12
Python?常用內(nèi)置模塊超詳細(xì)梳理總結(jié)
模塊是一個(gè)包含索引你定義的函數(shù)和變量的文件,其擴(kuò)展名為.py。模塊可以被其他程序引入,以使用該模塊中的函數(shù)等功能。這也是使用python標(biāo)準(zhǔn)庫的方法2022-03-03
使用Python3編寫抓取網(wǎng)頁和只抓網(wǎng)頁圖片的腳本
這篇文章主要介紹了使用Python3編寫抓取網(wǎng)頁和只抓網(wǎng)頁圖片的腳本,使用到了urllib模塊,需要的朋友可以參考下2015-08-08
Python使用functools實(shí)現(xiàn)注解同步方法
這篇文章主要介紹了Python使用functools實(shí)現(xiàn)注解同步方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02
基于python實(shí)現(xiàn)名片管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于python實(shí)現(xiàn)名片管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11

