python - 在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_())
解决方案
推荐阅读
- django - Django,修改模型管理器的初始查询集有什么好处?
- angular - md-tab中的Angular SlickGrid动态网格未加载定义
- r - 删除主要 y 轴标签和刻度,同时保留辅助 y 轴的标签和刻度
- c# - 为什么我的重置高分的重置代码不起作用?
- sql - 在表“Y”上引入 FOREIGN KEY 约束“X”可能会导致循环或多个级联路径
- php - 检测 PHP 生成器是否接受 send()?
- flutter - 如何在不显示所选值的情况下创建下拉按钮
- r - R:使用数据屏蔽函数/tidyverse 引用之前在同一自定义函数中创建的列
- c - 为什么静态变量只能用常量字面量初始化?
- c++ - Windows 7 Embedded - 以编程方式禁用磁盘缓存: