Arkadaşlar merhaba kodlarım şu şekilde;
import threading
import time
from pytube import YouTube
from pytube import Playlist
from PyQt5.QtWidgets import QApplication, QFileDialog
from programs import Ui_MainWindow
from PyQt5 import QtWidgets, QtCore
import sys
import os
from PyQt5.QtWidgets import QMainWindow, QMessageBox
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QProgressBar
from threading import Thread
from pytube.cli import on_progress
from PyQt5.QtWidgets import QFileDialog as filedialog
from PyQt5.QtCore import QTimer, pyqtSignal
from PyQt5.QtCore import QPoint, QTimer
class Main(QMainWindow):
signal_Msj = pyqtSignal()
signal_listeye_yazma = pyqtSignal(str)
def __init__(self):
super(Main, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setWindowTitle("Youtube")
self.ui.download_button.clicked.connect(self.videoYukle_Th)
self.ui.download_button.clicked.connect(self.videoYuklee)
self.ui.browse_konum.clicked.connect(self.dosya_yukle)
self.video_yuklenme = False
self.signal_listeye_yazma.connect(self.listeye_yaz)
self.signal_Msj.connect(self.msj_goster)
self.ui.progressBar.hide()
#BAŞLIK BARI SİLME
self.setWindowFlags (QtCore.Qt.FramelessWindowHint)
self.setAttribute (QtCore.Qt.WA_TranslucentBackground)
self.setFixedSize(self.size())
#HAREKET
self.dragPos = self.pos ( )
def mouseMoveEvent(event):
delta = QPoint (self.pos ( ) + event.globalPos ( ) - self.dragPos)
self.move (self.pos ( ) + event.globalPos ( ) - self.dragPos)
self.dragPos = event.globalPos ( )
event.accept ( )
self.ui.frame.mouseMoveEvent = mouseMoveEvent
#self.ui.label.mouseMoveEvent = mouseMoveEvent
self.ui.close.clicked.connect (lambda: self.close ( ))
self.ui.icona.clicked.connect (lambda: self.showMinimized ( ))
self.ui.link_line.setPlaceholderText("Lütfen link giriniz")
self.timer = QTimer()
self.timer.timeout.connect(self.videoYukle_Th)
self.ui.label_5.hide()
self.ui.mp4_radio.hide()
self.ui.mp3_radio.hide()
self.ui.link_line.textChanged.connect(self.link_kontrol)
self.ui.listWidget.hide()
def mousePressEvent(self, event):
self.dragPos = event.globalPos ( )
def msj_goster(self):
messagebox = QMessageBox()
messagebox.setIcon(QMessageBox.Warning)
messagebox.setWindowTitle("Mp3 Hatası")
messagebox.setText(
"Bir mp3 dosyasını iki kere indiremezsiniz")
messagebox.setStandardButtons(QMessageBox.Ok)
buton_ok = messagebox.button(QMessageBox.Ok)
buton_ok.setText("Tamam")
messagebox.exec_()
def listeye_yaz(self, video_ismi):
self.ui.listWidget.addItem(video_ismi)
def link_kontrol(self):
self.ui.label_5.show()
self.ui.mp4_radio.show()
self.ui.mp3_radio.show()
if self.ui.link_line.text() == "":
self.ui.label_5.hide()
self.ui.mp3_radio.hide()
self.ui.mp4_radio.hide()
else:
# self.ui.progressBar.show()
pass
def videoYukle_Th(self):
if not self.video_yuklenme:
Thread(target=self.videoYukle, daemon=True).start()
def videoYuklee(
self): # aşagıdakı fonksıyon videoYukle threadle calıstıgı ıcın messagebox hata verdırdı bunun yerıne başka bir fonksıyonla çağırdık
if self.ui.label_4.text() == "":
messagebox = QMessageBox()
messagebox.setIcon(QMessageBox.Warning)
messagebox.setWindowTitle("Hedef dizini")
messagebox.setText(
"Lütfen hedef dizinini boş bırakma")
messagebox.setStandardButtons(QMessageBox.Ok)
buton_ok = messagebox.button(QMessageBox.Ok)
buton_ok.setText("Tamam")
messagebox.exec_()
elif self.ui.link_line.text() == "":
messagebox = QMessageBox()
messagebox.setIcon(QMessageBox.Warning)
messagebox.setWindowTitle("Link hatası")
messagebox.setText(
"Lütfen link alanını boş bırakma")
messagebox.setStandardButtons(QMessageBox.Ok)
buton_ok = messagebox.button(QMessageBox.Ok)
buton_ok.setText("Tamam")
messagebox.exec_()
elif self.ui.mp4_radio.isChecked() == False and self.ui.mp3_radio.isChecked() == False:
messagebox = QMessageBox()
messagebox.setIcon(QMessageBox.Warning)
messagebox.setWindowTitle("Format Hatası")
messagebox.setText(
"Lütfen mp4 veya mp3 seçeneklerini seçiniz")
messagebox.setStandardButtons(QMessageBox.Ok)
buton_ok = messagebox.button(QMessageBox.Ok)
buton_ok.setText("Tamam")
messagebox.exec_()
def dosya_yukle(self):
file_dialog = QFileDialog()
self.file_dialog_yukle = file_dialog.getExistingDirectory(self, "Select") # dosyayı seçtik
self.ui.label_4.setText(self.file_dialog_yukle) # labele yazdırdık
def videoYukle(self):
self.ui.listWidget.show()
label_4 = self.ui.label_4.text()
url = self.ui.link_line.text()
self.my_playlist = Playlist(url)
# mp3 için
# playlisti indirirken listwidgets ekranında sayac youtubedeki tek videoyu indirirke gördüğü için sayıcıyı ilk başta tekli video indirdigini zannediyor
# ve sayacı oradan baslatıyor yani ekranda ilk videonun ismi 2 defa gözüküyor onu engellemek için playlisti ayrı bir kodla yazdık
# mp4 için
try:
if self.ui.mp4_radio.isChecked() == True:
playlist_sayac = 0
if self.my_playlist:
self.ui.progressBar.show()
for self.playlist in self.my_playlist.videos:
self.playlist.register_on_progress_callback(self.progress_callback_playlist)
self.playlist.register_on_complete_callback(self.complete_callback_playlist)
self.playlist.streams.filter(progressive=True).order_by('resolution').desc().first().download(
output_path=self.file_dialog_yukle)
playlist_sayac += 1
self.video_yuklenme = False
video_ismi = str(playlist_sayac) + ' - ' + self.playlist.title
self.signal_listeye_yazma.emit(video_ismi)
except KeyError:
pass
try:
if label_4 != "":
if self.ui.mp4_radio.isChecked() == True:
self.mp4_yukle = YouTube(url)
self.mp4_yukle.register_on_progress_callback(self.progress_callback)
self.mp4_yukle.register_on_complete_callback(self.complete_callback)
mp4_download = self.mp4_yukle.streams.get_highest_resolution()
if mp4_download:
self.ui.progressBar.show()
mp4_download.download(
output_path=self.file_dialog_yukle) # parantezin içine output_path = burayada konum yazman gerekıyor sonrakı konum
self.video_yuklenme = False
video_ismi = mp4_download.title
self.signal_listeye_yazma.emit(video_ismi)
except KeyError:
pass
try:
if self.ui.mp3_radio.isChecked() == True:
self.mp3_yukle = YouTube(url)
self.mp3_yukle.register_on_progress_callback(self.progress_callback_mp3)
self.mp3_yukle.register_on_complete_callback(self.progress_callback_mp3_callback)
mp3_download = self.mp3_yukle.streams.filter(only_audio=True).first()
if mp3_download:
self.ui.progressBar.show()
mp3 = mp3_download.download(output_path=self.file_dialog_yukle)
# dosyayı mp3'e çevirdik
base, ext = os.path.splitext(mp3)
new_file = base + '.mp3'
os.rename(mp3, new_file)
self.video_yuklenme = False
video_ismi = mp3_download.title
self.signal_listeye_yazma.emit(video_ismi)
except FileExistsError:
self.video_yuklenme = False
self.signal_Msj.emit()
#region
def progress_callback(self,stream, chunk, bytes_remaining):
download = self.mp4_yukle
contentsize = download.streams.get_highest_resolution().filesize
size = contentsize - bytes_remaining
steer = int(size / contentsize * 100)
self.ui.progressBar.setValue(steer)
def complete_callback(self,stream, file_handle): # progress bar kapandıgında
time.sleep(3)
self.ui.progressBar.hide()
#endregion
#region
def progress_callback_playlist(self,stream, chunk, bytes_remaining):
download = self.playlist
contentsize = download.streams.get_highest_resolution().filesize
size = contentsize - bytes_remaining
steer = int(size / contentsize * 100)
self.ui.progressBar.setValue(steer)
def complete_callback_playlist(self,stream, file_handle):
pass
#endregion
#region
def progress_callback_mp3(self,stream, chunk, bytes_remaining):
download = self.mp3_yukle
contentsize = download.streams.get_audio_only().filesize
size = contentsize - bytes_remaining
steer = int(size / contentsize * 100)
self.ui.progressBar.setValue(steer)
def progress_callback_mp3_callback(self,stream, file_handle):
time.sleep(3)
self.ui.progressBar.hide()
#endregion
app = QApplication([])
kullanicilar = Main()
kullanicilar.show()
app.exec_()
Sorunum şu;
Playlist videoyu indiriyorum. Her video indiğinde otomatik videonun tittle ismini listwidgetse yazdırıyor
fakat listenin en sonuna ilk inen videonun ismini ikinci defa yazıyor bunu nasıl engelleyebılırım ?
Kodlarda zaten playlist ve tek video indirmeyi ayırdım ama olmuyor
fotografdaki sorunu gösterdim