1

私はPYQT5を学んでいるので、これが私の最初の試みです。PYQT5 を学ぶために pyqt5 と pytube で youtube 動画ダウンローダーを作り始めましたが、プログレス バー部分 (プレイリスト) を処理できませんでした。コードを実行すると、AttributeError: 'mywindow' object has no attribute 'video'

アドバイスをいただけますか?

from PyQt5 import QtWidgets

from pytube import YouTube, Playlist

from mydesign import Ui_MainWindow  # importing our generated file

import sys

class mywindow(QtWidgets.QMainWindow):

    def __init__(self):

        super(mywindow, self).__init__()

        self.ui = Ui_MainWindow()

        self.ui.setupUi(self)
        self.ui.action_IKI.setShortcut("Ctrl+Q")
        self.ui.pushButton.clicked.connect(self.click)
        self.ui.action_IKI.triggered.connect(self.quit)


    def quit(self):
        QtWidgets.QApplication.quit()



    def click(self):
        self.completed = 0
        if self.ui.comboBox.currentIndex() == 0:
            while self.completed < 100:
                self.completed += 0.0001
                self.ui.progressBar_2.setValue(self.completed)
        elif self.ui.comboBox.currentIndex() == 1:
            link = self.ui.lineEdit.text()
            yt = YouTube(link, on_progress_callback=self.progress_func)
            video = yt.streams.filter(progressive=True, file_extension='mp4').first()
            video.download()


        elif self.ui.comboBox.currentIndex() == 2:
            pass

        elif self.ui.comboBox.currentIndex() == 3:
            pl = Playlist(self.ui.lineEdit.text())
            pl.populate_video_urls()
            for i in pl.video_urls:
                yt = YouTube(i, on_progress_callback=self.progress_func)
                video = yt.streams.filter(progressive=True, file_extension="mp4").first()
                video.download()

    def progress_func(self, stream, chunk, file_handle, bytes_remaining):
        size = self.video.filesize
        self.progress = (float(abs(bytes_remaining-size)/size))*float(100)
        self.ui.progressBar_2.setValue(self.progress)         
4

2 に答える 2

0

あなたに例を挙げてください、それは成功します。

yt = YouTube(YouTube_url,on_progress_callback=self.on_progress)
self.video = yt.streams.first()
self.video.download(self.datapath + '/video/', video_id)
def on_progress(self, chunk, file_handler, remaining):
    contentSize = self.video.filesize
    size = contentSize - remaining
    # print('已下载%.2f' % (percent))
    print('\r' + '[Download progress]:[%s%s]%.2f%%' % (
        '█' * int(size * 20 / contentSize), ' ' * (20 - int(size * 20 / contentSize)),
        float(size / contentSize * 100)), end='')

結果:

結果画像

于 2020-07-02T12:55:59.457 に答える