1

I am learning PYQT5 so this is my first try. To learn PYQT5 I started to make a youtube video downloader with pyqt5 and pytube but I couldn't handle the progress bar part(playlists). When I run the code it gives an AttributeError: 'mywindow' object has no attribute 'video'

Can you give me advice?

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) 

2 Answers 2

1

May be this should help:

self.video = yt.streams.filter(progressive=True, file_extension='mp4').first() self.video.download() 

There are 4 places to add self.video

Sign up to request clarification or add additional context in comments.

1 Comment

If it has helped, could you mark my answer as a right variant? :-)
0

give you an example ,it succeed.

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='') 

the result:

result image

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.