日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python实现在线音乐播放器(懒皮鼠音乐)

發(fā)布時(shí)間:2024/1/1 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现在线音乐播放器(懒皮鼠音乐) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python實(shí)現(xiàn)在線音樂播放器(懶皮鼠音樂)

利用qt設(shè)計(jì)requests庫實(shí)現(xiàn)在線音樂播放


文章目錄

  • python實(shí)現(xiàn)在線音樂播放器(懶皮鼠音樂)
  • 前言
  • 一、qt設(shè)計(jì)師設(shè)計(jì)界面
  • 二、使用步驟
    • 1.引入庫
    • 2.讀入數(shù)據(jù)
    • 3.控件信號(hào)函數(shù)綁定相應(yīng)槽函數(shù)
    • 4.搜索獲取音樂鏈接并播放
  • 完整代碼


前言

本文主要提供使用python各種庫的注意事項(xiàng),內(nèi)容僅供參考。


提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、qt設(shè)計(jì)師設(shè)計(jì)界面

將設(shè)計(jì)的ui生成py文件
可以參照:https://blog.csdn.net/zq1391345114/article/details/120104695

二、使用步驟

1.引入庫

代碼如下(示例):

from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時(shí)器 from PySide2.QtGui import QColor,QIcon import os import re import requests import json import urllib from ui_ma import Ui_Form from PySide2.QtWidgets import QMessageBox

2.讀入數(shù)據(jù)

代碼如下(示例):

def __init__(self):#if not os.path.exists('data'):#判斷文件夾是否存在os.makedirs('data\music',exist_ok=True)super().__init__()# 使用ui文件導(dǎo)入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)

該處省略綁定使用界


3.控件信號(hào)函數(shù)綁定相應(yīng)槽函數(shù)

代碼如下(示例):

self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號(hào)否則調(diào)試調(diào)用 self.ui.pushButton_2.clicked.connect(self.my_love) self.ui.pushButton_3.clicked.connect(self.xiazai) self.ui.pushButton_4.clicked.connect(lambda :self.xia(0)) self.ui.pushButton_5.clicked.connect(lambda :self.shang(0)) self.ui.pushButton_6.clicked.connect(self.no_love) self.ui.pushButton_7.clicked.connect(lambda: self.shang(1)) self.ui.pushButton_8.clicked.connect(lambda: self.xia(1)) self.ui.pushButton_9.clicked.connect(self.exit) self.ui.lineEdit.returnPressed.connect(self.sousuo) """************************************************""" self.ui.listWidget_2.currentItemChanged.connect(self.change)#列表選中行修改信號(hào) self.ui.listWidget.currentItemChanged.connect(self.change)self.ui.listWidget.itemClicked.connect(lambda: self.bofang(0)) # 單擊播放 #self.ui.listWidget.itemDoubleClicked.connect(self.my_love) # 雙擊喜歡 #self.ui.listWidget_2.setCurrentRow(0) #self.ui.listWidget_2.itemDoubleClicked.connect(self.no_love)#雙擊取消收藏 self.ui.listWidget_2.itemPressed.connect(lambda: self.bofang(1)) # 單擊播放

提示:該處使用了lambda表達(dá)式表示匿名函數(shù)傳參數(shù)


4.搜索獲取音樂鏈接并播放

在各個(gè)音樂網(wǎng)站獲取歌曲播放鏈接及時(shí)長,采用定時(shí)的方式播放下一曲音樂,這里是采用qt中的QwebEngineView實(shí)現(xiàn)在線播放

代碼如下(示例):

def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.music[i][1]url = self.huoqu(rid)self.ui.webview.setUrl(url)self.timer = QTimer()#timer.stop()self.timer.timeout.connect(lambda:self.xia(0))#定時(shí)器綁定函數(shù)#timer.setSingleShot(True)#設(shè)置單次定時(shí)#QTimer.singleShot((Time+1)*1000, self.xia)#定時(shí)器self.timer.start((Time+2)*1000)#啟動(dòng)或重新啟動(dòng)定時(shí)器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號(hào)m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.mylove[i][1]url = self.huoqu(rid)self.ui.web.setUrl(url)self.timer = QTimer()self.timer.timeout.connect(lambda:self.xia(1)) # 定時(shí)器綁定函數(shù)self.timer.start((Time + 2) * 1000) # 啟動(dòng)或重新啟動(dòng)定時(shí)器

這里可以看到
這里注意我注釋了很多代碼,他們都是不能正常之執(zhí)行的。

我的本意是設(shè)置定時(shí),歌曲播放完成后自動(dòng)播放下一曲。那么有以下方法:

  • sleep睡眠機(jī)制,很顯然是行不通的,程序睡眠,歌曲也就不能播放。
  • 多線程機(jī)制sleep單個(gè)線程,pyqt是不允許多線程機(jī)制的,我百度了下早期的python會(huì)直接報(bào)錯(cuò),但是我這里沒有報(bào)錯(cuò),即使不用sleep睡眠,程序也會(huì)直接卡死。但是創(chuàng)建的子線程能夠正常輸出結(jié)果。
  • threading定時(shí)器,這個(gè)定時(shí)器的原理也是創(chuàng)建一個(gè)子線程,所以它仍然不可用。
  • QTimer定時(shí)器,它是pyqt中的定時(shí)器,可用。在我的代碼中有注釋掉一個(gè)QTimer,是因?yàn)樗且粋€(gè)成員變量,當(dāng)點(diǎn)下一曲后上一個(gè)定時(shí)器還存在,所以后面就會(huì)出現(xiàn)歌曲沒有播放完就下一曲的情況,解決方法是采用類變量。所有定時(shí)器共用一個(gè)內(nèi)存。
  • 其次播放過程中實(shí)現(xiàn)動(dòng)態(tài)突出正在播放的歌曲那么就要采用currentItemChanged信號(hào)

    def change(self,item2,item1):item2.setBackgroundColor(QColor("red"))#設(shè)置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設(shè)置選中行背景顏色

    這里設(shè)置了判斷上一個(gè)item是否被選中。


    ## 5.下載

    代碼如下(示例):

    def xiazai(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據(jù)rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯(cuò)誤,產(chǎn)生異常.")

    提示:這里下載路徑不存在就會(huì)下載失敗,所以我們?cè)陂_始就要判斷下載路徑是否存在,不存在就要利用代碼os.makedirs('data\music',exist_ok=True)新建。


    完整代碼

    提示:源碼僅供參考。

    from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時(shí)器 from PySide2.QtGui import QColor,QIcon import os import re import requests import json import urllib from ui_ma import Ui_Form from PySide2.QtWidgets import QMessageBoxclass MainWindow(QWidget):music={}mylove={}def __init__(self):#if not os.path.exists('data'):#判斷文件夾是否存在os.makedirs('data\music',exist_ok=True)super().__init__()# 使用ui文件導(dǎo)入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)self.shuaxin()# 使用界面定義的控件,也是從ui里面訪問self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號(hào)否則調(diào)試調(diào)用self.ui.pushButton_2.clicked.connect(self.my_love)self.ui.pushButton_3.clicked.connect(self.xiazai)self.ui.pushButton_4.clicked.connect(lambda :self.xia(0))self.ui.pushButton_5.clicked.connect(lambda :self.shang(0))self.ui.pushButton_6.clicked.connect(self.no_love)self.ui.pushButton_7.clicked.connect(lambda: self.shang(1))self.ui.pushButton_8.clicked.connect(lambda: self.xia(1))self.ui.pushButton_9.clicked.connect(self.exit)self.ui.lineEdit.returnPressed.connect(self.sousuo)"""************************************************"""self.ui.listWidget_2.currentItemChanged.connect(self.change)#列表選中行修改信號(hào)self.ui.listWidget.currentItemChanged.connect(self.change)self.ui.listWidget.itemClicked.connect(lambda: self.bofang(0)) # 單擊播放#self.ui.listWidget.itemDoubleClicked.connect(self.my_love) # 雙擊喜歡#self.ui.listWidget_2.setCurrentRow(0)#self.ui.listWidget_2.itemDoubleClicked.connect(self.no_love)#雙擊取消收藏self.ui.listWidget_2.itemPressed.connect(lambda: self.bofang(1)) # 單擊播放def change(self,item2,item1):item2.setBackgroundColor(QColor("red"))#設(shè)置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設(shè)置選中行背景顏色def exit(self):self.ui.webview.setUrl("")self.ui.web.setUrl("")self.timer.stop()def no_love(self):i=self.ui.listWidget_2.currentRow()for j in range(len(self.mylove)-i-1):self.mylove[i]=self.mylove[i+1]i+=1del self.mylove[i]s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt","w")for j in range(len(self.mylove)):s.write(str(self.mylove[j]))s.close()self.shuaxin()def my_love(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)j=len(self.mylove)self.mylove[j]=self.music[i]s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt",'a')s.write(str(self.music[i]))s.close()self.ui.listWidget_2.addItem('【{}】'.format(j+1) + self.mylove[j][0])def shuaxin(self):self.ui.listWidget_2.clear()if os.path.exists("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt"):s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt",'r')content=s.read()s.close()p = re.compile(r'\[.*?\]')i=0for one in p.findall(content):self.mylove[i]=eval(one)#將字符串轉(zhuǎn)換成列表self.ui.listWidget_2.addItem('【{}】'.format(i + 1)+self.mylove[i][0])i+=1def sousuo(self): # 獲取下載ridmusicname = self.ui.lineEdit.text()encodename = urllib.parse.quote(musicname) # 對(duì)字符串進(jìn)行編碼url = 'https://www.kuwo.cn/api/www/search/searchMusicBykeyWord'headers = {"Cookie": "Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1611813721; _ga=GA1.2.1711987833.1611813721; _gid=GA1.2.1936491096.1611813721; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1611813751; _gat=1; kw_token=AMJKSZZ014","csrf": "AMJKSZZ014", "Host": "www.kuwo.cn","Referer": "http://www.kuwo.cn/search/list?key={}".format(encodename),"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53", }data = {"key": "{}".format(musicname), 'pn': 1, "rn": 30, "httpsStatus": 1,"reqId": " f1b198b0-612e-11eb-b682-25ec8c838219"} # 加入后會(huì)自動(dòng)編碼res = requests.request('get', url, headers=headers, params=data, timeout=1)dict = json.loads(res.text)if dict['code'] != 200:misicinfo = [{'name': '獲取失敗,請(qǐng)重試!', 'artist': ''}]else:misicinfo = dict['data']['list']self.ui.listWidget.clear()for i in range(len(misicinfo)):name = misicinfo[i]['name'] + '-' + misicinfo[i]['artist']self.music[i] = [name,misicinfo[i]['rid'],misicinfo[i]['songTimeMinutes']]#組建歌曲信息:名字,rid,時(shí)長self.ui.listWidget.addItem( '【{}】'.format(i + 1) + name)#self.ui.listWidget.setCurrentRow(0)#默認(rèn)選中第一行#self.ui.listWidget.item(1).setBackgroundColor(QColor('red'))#設(shè)置顏色def huoqu(self,rid): # 獲取urlurl = 'http://www.kuwo.cn/url?'data1 = {"format": "mp3","rid": "{}".format(rid),"response": "url","type": "convert_url3","br": "128kmp3","from": "web","t": 1611821852163,"httpsStatus": 1}header1 = {"User-Agent": "ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53"}res1 = requests.get(url, headers=header1, params=data1, timeout=1)return json.loads(res1.text)['url']def xiazai(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據(jù)rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯(cuò)誤,產(chǎn)生異常.")def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.music[i][1]url = self.huoqu(rid)self.ui.webview.setUrl(url)self.timer = QTimer()#timer.stop()self.timer.timeout.connect(lambda:self.xia(0))#定時(shí)器綁定函數(shù)#timer.setSingleShot(True)#設(shè)置單次定時(shí)#QTimer.singleShot((Time+1)*1000, self.xia)#定時(shí)器self.timer.start((Time+2)*1000)#啟動(dòng)或重新啟動(dòng)定時(shí)器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號(hào)m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.mylove[i][1]url = self.huoqu(rid)self.ui.web.setUrl(url)self.timer = QTimer()self.timer.timeout.connect(lambda:self.xia(1)) # 定時(shí)器綁定函數(shù)self.timer.start((Time + 2) * 1000) # 啟動(dòng)或重新啟動(dòng)定時(shí)器def xia(self,m):if m==0:i = self.ui.listWidget.currentRow()+1 # 獲取選中序號(hào)if i>=self.ui.listWidget.count():#判斷是否是最后一曲i=0self.ui.listWidget.setCurrentRow(i)else:i=self.ui.listWidget_2.currentRow()+1if i>=self.ui.listWidget_2.count():#判斷是否是最后一曲i=0self.ui.listWidget_2.setCurrentRow(i)self.bofang(m)def shang(self,m):if m==0:i = self.ui.listWidget.currentRow()-1 # 獲取選中序號(hào)if i<0:#判斷是否是第一曲i=self.ui.listWidget.count()-1self.ui.listWidget.setCurrentRow(i)#修改選中項(xiàng)else:i = self.ui.listWidget_2.currentRow() - 1 # 獲取選中序號(hào)if i < 0: # 判斷是否是第一曲i = self.ui.listWidget_2.count() - 1self.ui.listWidget_2.setCurrentRow(i) # 修改選中項(xiàng)self.bofang(m) app = QApplication([]) mainw = MainWindow() mainw.show() app.exec_()

    微信關(guān)注公眾號(hào)懶皮鼠

    總結(jié)

    以上是生活随笔為你收集整理的python实现在线音乐播放器(懒皮鼠音乐)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美一级在线观看视频 | 华人av在线 | 亚洲字幕| 无遮挡的裸体按摩的视频 | 久久av在线播放 | 闫嫩的18sex少妇hd | 亚洲大尺度在线观看 | 欧美专区在线播放 | 欧美婷婷| 蜜桃成人免费视频 | 无码人妻av免费一区二区三区 | 大肉大捧一进一出好爽 | 丰满少妇在线观看资源站 | 久久久999精品 | 国产毛片久久久久久国产毛片 | 中文字幕在线免费看线人 | 性高潮久久久久久久久久 | 可以看的av网址 | 三级欧美日韩 | 欧美久久一级 | 456亚洲影院| 亚洲中文字幕无码不卡电影 | 亚洲欧美日韩在线播放 | 欧色av| 欧美性生活一区二区三区 | 免费看黄色片的网站 | 久久国产露脸精品国产 | 91精产品一区观看 | 国产强被迫伦姧在线观看无码 | 亚洲一区二区天堂 | 免费成人美女女电影 | av在线资源网站 | 日韩一区二区三区在线视频 | 国内自拍xxxx18 | 日韩av一卡 | 人人妻人人爽人人澡人人精品 | 国产网址在线观看 | 边打电话边做 | 久草国产视频 | 亚洲精品一区二区三区精华液 | 青青草在线免费观看 | 4438x全国最大成人 | 在线视频免费播放 | av免费亚洲 | 成人一级黄色片 | av中文字幕亚洲 | 亚洲色偷精品一区二区三区 | 538国产视频| 国产成人av一区二区三区不卡 | 女女调教被c哭捆绑喷水百合 | 91免费看视频 | 中文字幕av一区二区三区 | 成人手机在线免费视频 | se综合| 亚洲欧美自偷自拍 | 美美女高清毛片视频免费观看 | 绯色av一区二区三区高清 | 人妻少妇精品无码专区久久 | 中出少妇 | 制服诱惑一区二区三区 | 日韩欧美一区二区区 | 台湾swag在线观看 | 国产乱色精品成人免费视频 | 久久中文精品 | 国产伦精品一区二区三区视频我 | 久久网国产 | 国产一区二区在线免费观看 | 91性色| 久久一本综合 | 亚洲精品高清在线 | 亚洲在线精品视频 | 久草加勒比 | 在线a天堂 | 欧美国产一区二区 | 国产一区视频在线观看免费 | 婷婷激情四射 | 性奶老妇 视频 | 久久露脸国语精品国产91 | 91叉叉叉| 97精品国产97久久久久久春色 | 又欲又污又肉又黄短文 | 中文字幕第35页 | 欧美老司机 | 色七七视频 | 巨胸大乳www视频免费观看 | 亚洲精品动漫在线观看 | 日韩深夜在线 | 青青导航 | 国产成人在线网站 | 日韩字幕在线 | 精品一二三区久久aaa片 | 一区二区三区四区在线免费观看 | 日韩av日韩 | 久久精品久久精品久久 | 久久久精品免费观看 | 国产午夜伦理 | 亚洲精选av| 国产白浆一区二区 | 18av视频 |