本篇文章將帶你一步步建立一個簡單的 PyQt5 GUI 應用程式,通過 yt-dlp
來下載 YT 視頻。你可以在這個應用中輸入視頻的 URL,並即時看到下載進度。
下載到開啟的資料夾路徑
在開始之前,請確保你已經安裝了以下軟體和庫:
python --version若未安裝,可以前往 Python 官方網站 下載並安裝。
pip install pyqt5
yt-dlp
是一個強大的視頻下載工具,可以用來下載 YouTube 和其他網站上的視頻。使用以下命令安裝:pip install yt-dlp
以下是程式碼,將展示如何使用 PyQt5 創建一個簡單的 GUI 下載工具,並結合 yt-dlp
來下載視頻。
import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QLineEdit, QPushButton, QLabel, QWidget
from PyQt5.QtCore import QThread, pyqtSignal
import subprocess
class DownloadThread(QThread):
update_label = pyqtSignal(str)
def __init__(self, url, parent=None):
super().__init__(parent)
self.url = url
def run(self):
try:
self.update_label.emit("正在處理...") # 初始狀態
# 使用 yt-dlp 下載
process = subprocess.Popen(
['yt-dlp', '--progress', '--newline', self.url], # 啟動 yt-dlp 進行下載
stdout=subprocess.PIPE, # 捕獲標準輸出
stderr=subprocess.PIPE, # 捕獲錯誤輸出
text=True # 開啟文本模式
)
# 實時捕獲輸出,並將其更新到 UI
for line in process.stdout:
self.update_label.emit(line.strip())
process.wait() # 等待下載完成
# 判斷下載是否成功
if process.returncode == 0:
self.update_label.emit("下載完成!")
else:
self.update_label.emit("下載失敗,請檢查網址是否正確。")
except Exception as e:
self.update_label.emit(f"錯誤:{e}") # 顯示錯誤信息
class DownloadApp(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("YT 下載器") # 設定視窗標題
layout = QVBoxLayout() # 垂直布局
# 輸入框
self.url_input = QLineEdit(self)
self.url_input.setPlaceholderText("請輸入YT視頻網址") # 提示文本
layout.addWidget(self.url_input)
# 下載按鈕
self.download_button = QPushButton("下載", self)
self.download_button.clicked.connect(self.start_download) # 按下按鈕時觸發下載
layout.addWidget(self.download_button)
# 狀態標籤
self.status_label = QLabel("狀態:等待輸入網址", self)
layout.addWidget(self.status_label)
self.setLayout(layout)
def start_download(self):
url = self.url_input.text().strip() # 獲取輸入的網址
if not url:
self.status_label.setText("狀態:請輸入有效的網址") # 若網址無效,顯示提示
return
self.status_label.setText("狀態:正在處理...") # 顯示正在處理的訊息
# 創建下載線程,並開始下載
self.download_thread = DownloadThread(url)
self.download_thread.update_label.connect(self.update_status) # 更新 UI
self.download_thread.start()
def update_status(self, message):
self.status_label.setText(f"狀態:{message}") # 顯示當前狀態
if __name__ == "__main__":
app = QApplication(sys.argv)
window = DownloadApp()
window.resize(400, 200) # 設定視窗大小
window.show() # 顯示視窗
sys.exit(app.exec_()) # 進入主事件循環
DownloadThread
)DownloadThread
類別繼承自 QThread
,負責執行視頻下載任務。使用 yt-dlp
命令行工具下載視頻,並通過 stdout
實時捕獲下載過程的輸出。update_label
信號,更新 UI 上的標籤顯示下載進度或錯誤訊息。DownloadApp
)DownloadApp
類別是應用的主界面,包含一個輸入框(QLineEdit
)、一個下載按鈕(QPushButton
)和一個顯示下載狀態的標籤(QLabel
)。yt-dlp
下載視頻subprocess.Popen
啟動 yt-dlp
下載視頻,並實時捕獲輸出來更新下載進度。yt-dlp
遇到無法處理的視頻,會顯示錯誤訊息,並請檢查網址是否正確。