Остановить скачивание видео при нажатии кнопки
Приложение для скачивания видео.
В одной функции я проверяю все значение и добавляю MessageBox с ошибками и запускаю функцию скачивания видео.
Скачивание проходит с помощью youtube-dl.
Мне нужно, чтобы при нажатии кнопки скачивание останавливалось.
import youtube_dl
from PyQt5 import QtCore, QtGui, QtWidgets
import os
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(600, 500)
MainWindow.setMinimumSize(QtCore.QSize(600, 500))
MainWindow.setMaximumSize(QtCore.QSize(1200, 1000))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("../../../../../Downloads/youtube.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
MainWindow.setStyleSheet("background-color: rgb(62, 62, 62);\n"
"background-color: rgb(30, 30, 30);")
MainWindow.setTabShape(QtWidgets.QTabWidget.Triangular)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.url_line = QtWidgets.QLineEdit(self.centralwidget)
self.url_line.setGeometry(QtCore.QRect(30, 30, 500, 30))
self.url_line.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.url_line.setAutoFillBackground(False)
self.url_line.setStyleSheet("font: 12pt \"Times New Roman\";\n"
"color: rgb(255, 0, 0);\n"
"border: 1px solid red;")
self.url_line.setText("")
self.url_line.setReadOnly(False)
self.url_line.setCursorMoveStyle(QtCore.Qt.LogicalMoveStyle)
self.url_line.setClearButtonEnabled(True)
self.url_line.setObjectName("url_line")
self.path_line = QtWidgets.QLineEdit(self.centralwidget)
self.path_line.setGeometry(QtCore.QRect(30, 80, 425, 30))
self.path_line.setStyleSheet("color: rgb(255, 0, 0);\n"
"font: 12pt \"Times New Roman\";\n"
"border: 1px solid red;")
self.path_line.setText("")
self.path_line.setClearButtonEnabled(True)
self.path_line.setObjectName("path_line")
self.quality_label = QtWidgets.QLabel(self.centralwidget)
self.quality_label.setGeometry(QtCore.QRect(30, 130, 111, 25))
self.quality_label.setStyleSheet("font: 10pt \"Times New Roman\";\n"
"color: rgb(255, 0, 0);")
self.quality_label.setAlignment(QtCore.Qt.AlignCenter)
self.quality_label.setObjectName("quality_label")
self.quality_box = QtWidgets.QComboBox(self.centralwidget)
self.quality_box.setGeometry(QtCore.QRect(200, 130, 251, 23))
self.quality_box.setStyleSheet("color: rgb(255, 0, 0);\n"
"font: 10pt \"Times New Roman\";")
self.quality_box.setEditable(False)
self.quality_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
self.quality_box.setObjectName("quality_box")
self.quality_box.addItem("")
self.download_but = QtWidgets.QPushButton(self.centralwidget)
self.download_but.setGeometry(QtCore.QRect(225, 350, 150, 28))
self.download_but.setStyleSheet("font: 75 12pt \"Times New Roman\";\n"
"color: rgb(255, 0, 0);")
self.download_but.setObjectName("download_but")
self.path_but = QtWidgets.QPushButton(self.centralwidget)
self.path_but.setGeometry(QtCore.QRect(470, 80, 60, 30))
self.path_but.setStyleSheet("background-color: rgb(255, 255, 255);")
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap("../../../рабочий стол обои/Find.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.path_but.setIcon(icon1)
self.path_but.setObjectName("path_but")
self.info_label = QtWidgets.QLabel(self.centralwidget)
self.info_label.setGeometry(QtCore.QRect(0, 460, 600, 20))
self.info_label.setStyleSheet("font: 75 12pt \"Times New Roman\";")
self.info_label.setText("")
self.info_label.setAlignment(QtCore.Qt.AlignCenter)
self.info_label.setObjectName("info_label")
self.download = QtWidgets.QProgressBar(self.centralwidget)
self.download.setGeometry(QtCore.QRect(30, 400, 550, 25))
self.download.setStyleSheet("color: rgb(255, 0, 0);\n"
"font: 10pt \"Times New Roman\";")
self.download.setProperty("value", 24)
self.download.setObjectName("download")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Youtube downloader"))
self.url_line.setPlaceholderText(_translate("MainWindow", "Вставьте URL ссылку на видео"))
self.path_line.setPlaceholderText(_translate("MainWindow", "Выберите папку для видео"))
self.quality_label.setText(_translate("MainWindow", "Качество видео"))
self.quality_box.setItemText(0, _translate("MainWindow", "Только аудио"))
self.download_but.setText(_translate("MainWindow", "Скачать"))
self.path_but.setText(_translate("MainWindow", "Путь"))
self.download_but.clicked.connect(self.download_video)
self.path_but.clicked.connect(self.get_folder)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.url_flag = False
self.fol_flag = False
self.setupUi(self)
def get_video(self):
if len(self.url_line.text()) > 5:
self.url = self.url_line.text()
self.url_flag = True
def download_video(self):
if self.download_but.text() == 'Скачать':
self.get_video()
if self.url_flag:
if self.fol_flag:
self.run(True)
self.download_but.setText('Отмена')
else:
QtWidgets.QMessageBox.warning(self, 'Ошибка', 'Вы не указали папку')
else:
QtWidgets.QMessageBox.warning(self, 'Ошибка', "Вы не указали URL ссылку!")
else:
self.run(False)
self.download_but.setText('Скачать')
# ?????????????7
def get_folder(self):
self.dow_fol = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку для видео")
if self.dow_fol != '':
self.fol_flag = True
self.path_line.setText(str(self.dow_fol))
os.chdir(self.dow_fol)
def locker(self, lock_val):
buttons = [self.path_but, self.url_line, self.quality_box, self.path_line]
for i in buttons:
i.setDisabled(lock_val)
def run(self, run_value):
if run_value:
with youtube_dl.YoutubeDL({}) as ydl:
ydl.download([self.url])
self.locker(True)
else:
break
# ?????
def quality(self):
pass
def progressbar(self):
pass
def label_info(self):
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Я искал какую-нибудь функцию в самом yotube-dl но ничего не нашел.