首页 > 解决方案 > 在python中显示下载百分比进度条

问题描述

我正在编写有关 youtube-downloader 项目的代码,所以我想在 ProgressBar 中显示下载百分比,但 progressBar dosent 显示下载百分比并且不填充栏。有人可以帮助我吗?进度条无法访问下载按钮的问题在哪里?我必须做什么改变?

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import pytube
import re
import os
import subprocess
from pytube.__main__ import YouTube
from Youtube import Ui_MainWindow


class YoutubeMain(QMainWindow):
    def __init__(self):
        super().__init__()
        QMainWindow.__init__(self)
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        self.setWindowTitle('Youtube Downloader')
        self.ui.comboBox.addItem('mp3')
        self.ui.comboBox.addItem('avi')
        self.ui.comboBox.addItem('mov')
        self.ui.comboBox.addItem('wmv')
        self.show()
        self.initSignal()

    def initSignal(self) :
        self.ui.pushButton.clicked.connect(self.downloadWork)
        self.ui.toolButton.clicked.connect(self.savePathWork)

    def progress_bar(self,chunk, stream, file_handle, bytes_remaining,previousprogress = 0):
        total_size = stream.filesize
        bytes_download = total_size - bytes_remaining
    
        liveprogress = (int)(bytes_download / total_size * 100)
        if liveprogress > previousprogress:
           previousprogress = liveprogress
           self.ui.progressBar.setValue(liveprogress)
           print(liveprogress)


@pyqtSlot()
def savePathWork(self) :
    fpath = QFileDialog.getExistingDirectory(self, 'Select the Directory')
    self.ui.save_textEdit.setText(fpath)


@pyqtSlot()
def downloadWork(self) :
    url = self.ui.dl_textEdit.text().strip()
    save = self.ui.save_textEdit.text()
    regex = re.compile('^https://www.youtube.com/watch?')

    if url is None or url == '' or not url :
        
        self.ui.dl_textEdit.setFocus(True)
        return None

    if save is None or save == '' or not save :
        
        return None

    if regex.match(url) is not None :
        
        video = pytube.YouTube(url)
        stream = video.streams.all()
        down_dir = self.ui.save_textEdit.text()
        stream[0].download(down_dir)
        yt=YouTube(url.text())
        yt.register_on_progress_callback(self.progress_bar)
        
        if self.ui.checkBox.isChecked() :

    
            oriFiileName = stream[0].default_filename
            newFileName = os.path.splitext(oriFiileName)[0]


            subprocess.call(['ffmpeg','-i',
                os.path.join(down_dir, oriFiileName),
                os.path.join(down_dir, newFileName + '.' + 
                str(self.ui.comboBox.currentText()))
            ])


if __name__=="__main__":
    import sys
    app=QApplication(sys.argv)
    root= YoutubeMain()
    sys.exit(app.exec_())

标签: pythonpyqt5progress-baryoutube-dl

解决方案


推荐阅读