91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

發布時間:2021-03-30 09:35:04 來源:億速云 閱讀:693 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、創建UI界面

首先,我們來創建這個播放器的UI界面。這個播放器一共有6個控件:

  1. 左上角的程序關閉按鈕;

  2. 左側的播放狀態標簽;

  3. 頂部的slogan;

  4. 播放/暫停按鈕;

  5. 下一首按鈕;

  6. 播放進度條;

基于以上控件,我們用一個網格布局來排列;

class Music(QtWidgets.QMainWindow):
 def __init__(self):
 super().__init__()
 self.setFixedSize(400,200)
 self.setWindowTitle("州的先生")
 self.init_ui()
 self.custom_style()
 self.playing = False # 播放狀態初始化為否
 self.player = QMediaPlayer(self)

 # 設置樣式
 def custom_style(self):
 self.setStyleSheet('''
  #main_widget{
  border-radius:5px;
  }
  #play_btn,#pervious_btn,#next_btn{
  border:none;
  }
  #play_btn:hover,#pervious_btn:hover,#next_btn:hover{
  background:gray;
  border-radius:5px;
  cursor:pointer;
  }
 ''')
 self.close_btn.setStyleSheet('''
  QPushButton{
  background:#F76677;
  border-radius:5px;
  }
  QPushButton:hover{
  background:red;
  }''')
 self.status_label.setStyleSheet('''
  QLabel{
  background:#F7D674;
  border-radius:5px;
  }
 ''')

 # 初始化UI界面
 def init_ui(self):
 # 窗口布局
 self.main_widget = QtWidgets.QWidget()
 self.main_widget.setObjectName("main_widget")
 self.main_layout = QtWidgets.QGridLayout()
 self.main_widget.setLayout(self.main_layout)

 # 標題
 self.title_lable = QtWidgets.QLabel("聽者,如過眼云煙……")

 # 關閉按鈕
 self.close_btn = QtWidgets.QPushButton("") # 關閉按鈕
 self.close_btn.setFixedSize(15,15)

 # 音樂狀態按鈕
 self.status_label = QtWidgets.QLabel("")
 self.status_label.setFixedSize(15,15)

 # 播放按鈕
 play_icon = qta.icon("fa.play-circle",)
 self.play_btn = QtWidgets.QPushButton(play_icon,"")
 self.play_btn.setIconSize(QtCore.QSize(80, 80))
 self.play_btn.setFixedSize(82,82)
 self.play_btn.setObjectName("play_btn")

 # 下一首按鈕
 next_icon = qta.icon("fa.play-circle-o")
 self.next_btn = QtWidgets.QPushButton(next_icon,"")
 self.next_btn.setIconSize(QtCore.QSize(80,80))
 self.next_btn.setFixedSize(82,82)
 self.next_btn.setObjectName("next_btn")

 # 進度條
 self.process_bar = QtWidgets.QProgressBar()
 self.process_value = 0
 self.process_bar.setValue(self.process_value)
 self.process_bar.setFixedHeight(5)
 self.process_bar.setTextVisible(False)

 self.main_layout.addWidget(self.close_btn,0,0,1,1)
 self.main_layout.addWidget(self.title_lable,0,1,1,1)
 self.main_layout.addWidget(self.status_label,1,0,1,1)
 self.main_layout.addWidget(self.play_btn, 1, 1, 1, 1)
 self.main_layout.addWidget(self.next_btn, 1, 2, 1, 1)
 self.main_layout.addWidget(self.process_bar,2,0,1,3)

 self.setCentralWidget(self.main_widget)

在上面的代碼中,我們通過Qt內置的按鈕控件QPushButton、標簽控件QLabel、進度條控件QProgressBar等把播放器的基礎界面構建好了,然后通過setStyleSheet()方法設置各個控件的樣式,最終得到下面的界面:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

頂部的邊框有點丑丑的,我們通過setWindowFlag()將其隱藏起來:

self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隱藏邊框

這樣,完整且好看的界面就完成了,如下圖所示:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

二、獲取網絡歌曲

既然是音樂播放器,當然要能夠播放音樂。我們創建的這個音樂播放器不能添加本地的音樂,那就只能播放網絡的音樂了。州的先生(https://zmister.com)在網上找了很久,終于找到了一個免費穩定的音樂接口。請求這個接口會隨機返回一個音樂的播放地址。正好符合我們的播放器的設定,就它了:

def run(self):
 reps = requests.post("https://api.uomg.com/api/rand.music?format=json")
 # print(reps.json())
 file_url = reps.json()['data']['url']
 self.finished_signal.emit(file_url)

我們將其用Qt的線程模塊QThread包裝起來,作為一個異步的子線程調用:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

有了UI界面和網絡音樂,下面我們UI界面上的控件與音樂的播放通過信號槽(事件響應)連接起來。

三、創建和鏈接信號槽

因為我們隱藏的UI界面自帶的邊框,所以沒有了關閉按鈕。我們之前創建了左側小紅點作為播放器關閉的按鈕,接著還需要一個響應函數來關閉播放器:

# 關閉程序
def close_btn_event(self):
 self.close()
self.close_btn.clicked.connect(self.close_btn_event)

這樣,點擊小紅點,播放器就可以關閉退出了。下面來處理音樂的播放。

在這里,我們借助Qt提供的QtMultimedia子模塊中的QMediaPlayer來實現MP3音樂的播放,QtMultimedia的詳細使用可見Qt的官方文檔:https://doc.qt.io/qtforpython/PySide2/QtMultimedia/index.html#module-PySide2.QtMultimedia:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

這個方法,接受一個MP3音樂的網絡地址參數,然后通過配置,對其進行播放。

我們之前創建了一個繼承于QThread的網絡歌曲獲取類GetMusicThread,通過創建另一個方法對其進行調用,并將完成信號(finished_signal)連接到init_player()方法即可實現網絡歌曲的獲取和播放:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

在這里,next_music()方法調用GetMusicThread隨機獲取一首歌曲,然后將歌曲的URL地址返回給init_player()方法,以實現播放。

next_music()方法是播放歌曲的主要方法,播放按鈕、下一首按鈕、一首歌曲播放完之后自動播放下一首歌曲都可以調用它。

播放音樂按鈕需要控制和判斷音樂的狀態,可通過QMediaPlayer的mediaStatus()方法獲取,并以此來進行判斷:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

為了能夠在播放完一首歌曲后自動獲取和播放下一首歌曲,我們需要創建一個計時器,每隔一秒獲取當前播放器的狀態,判斷其是否已經播放完了音樂,如果播放完了,就調用next_music()方法:

self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.start()
self.timer.timeout.connect(self.check_music_status)
def check_music_status(self):
 player_status = self.player.mediaStatus()
 player_duration = self.player.duration()
 # print("音樂時間:",player_duration)
 # print("當前播放器狀態",player_status)
 if player_status == 7:
 self.next_music()

再經過一些細節調整,我們就完成了這個“聽后即焚”的網絡音樂播放器:

Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能

關于“Python如何使用PyQt5/PySide2編寫一個極簡的音樂播放器功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

腾冲县| 读书| 柳河县| 翼城县| 常宁市| 宜兰县| 西乌珠穆沁旗| 重庆市| 桐城市| 安达市| 晋江市| 乐清市| 徐闻县| 商河县| 桐城市| 深水埗区| 龙川县| 普兰店市| 两当县| 会东县| 抚松县| 巫溪县| 吉林省| 洛隆县| 汾西县| 嵊泗县| 英德市| 高雄市| 昭苏县| 昌江| 洞头县| 竹山县| 黎平县| 香河县| 如东县| 九台市| 甘南县| 哈尔滨市| 临海市| 定边县| 宜川县|