Bu bölüme kadar epeyce bir şey öğrendik ve basit bir indirme yöneticisi yazdık. Şimdi geliştirdiğimiz bu programı biraz daha işlevsel hale getirelim.
- İndirme işleminin başarılı ya başarısız olduğunu kullanıcıya bildiren bir mesaj gösterebiliriz.
- Ayrıca indirme konumunu elle yazmak yerine, kullanıcıya bir dosya yöneticisi penceresi sunarak daha kullanıcı dostu bir şekilde bu işlemin gerçekleşmesini sağlayabiliriz.
İlk olarak geri bildirim mesajlarıyla başlayalım.
from PyQt4.QtCore import * from PyQt4.QtGui import * import sys import urllib.request class Downloader(QDialog): def __init__(self): QDialog.__init__(self) layout = QVBoxLayout() self.url = QLineEdit() self.save_location = QLineEdit() self.progress_bar = QProgressBar() download_button = QPushButton("İndir") self.url.setPlaceholderText("URL") self.save_location.setPlaceholderText("Dizin") self.progress_bar.setValue(0) self.progress_bar.setAlignment(Qt.AlignHCenter) layout.addWidget(self.url) layout.addWidget(self.save_location) layout.addWidget(self.progress_bar) layout.addWidget(download_button) self.setLayout(layout) self.setWindowTitle("DOWNLOADER") self.setFocus() download_button.clicked.connect(self.download) def download(self): url = self.url.text() save_location = self.save_location.text() urllib.request.urlretrieve(url, save_location, self.report) def report(self, blocknum, blocksize, totalsize): current = blocknum * blocksize if totalsize > 0: percent = current * 100 / totalsize self.progress_bar.setValue(percent) app = QApplication(sys.argv) dialog = Downloader() dialog.show() app.exec_()
Geri Bildirimler
Geri bildirimleri download()
metodu içinde vereceğiz çünkü indirme işlemini burada gerçekleştiriyoruz. QMessageBox
sınıfını kullanacağız. QMessageBox
warning, information gibi metotlarla bize hazır arayüzler sunuyor.
download()
metodumuzu yeniden düzenleyelim. Basit bir try - except
bloğu ile indirme başarılı mı değil mi kontrol edip, buna göre geri bildirim vereceğiz.
def download(self): url = self.url.text() save_location = self.save_location.text() try: urllib.request.urlretrieve(url, save_location, self.report) QMessageBox.information(self, "Bilgi", "İndirme tamamlandı") self.progress_bar.setValue(0) self.url.setText("") self.save_location.setText("") except: QMessageBox.warning(self, "Uyarı", "İndirme başarısız") return
Dosya Yöneticisi
Şimdi dosyayı kaydeceğimiz konumu daha rahat seçebilmek için programa “Göz at” işlevi ekleyelim. Bunun için önce bir buton oluşturmamız lazım. Daha tabii ki bu butona bir event handler bağlayacağız. Bunun içinde browse()
isimli bir metot oluşturacağız.
browse_button
isminde QPushButton
oluşturup, layouta eklediğimizi varsayarak event handler’ı bağlıyorum:
browse_button.clicked.connect(self.browse)
Artık göz atma işlemini gerçekleştireceğimiz browse()
metodunu yapılandırabiliriz.
def browse(self): save_file = QFileDialog.getSaveFileName(self, caption="Kaydet", directory=".", filter="All files (*.*)") self.save_location.setText(QDir.toNativeSeparators(save_file))
QFileDialog.getSaveFileName()
ile açılacak olan göz atma penceresinin özelliklerini belirtiyoruz ve geriye string olarak değer alıyoruz.
Aldığımız bu string değerini, dizini girdiğimiz line edite atıyoruz. QDir.toNativeSeparators()
işletim sistemine göre değişen “/” ya da “\” işaretlerini otomatik olarak belirliyor.
caption
ile pencere başlığını belirledik.directory
varsayılan olarak açılan konumu belirtiyor.filter
ile kayıt yapılacak dosya uzantılarını belirtiyoruz.
from PyQt4.QtCore import * from PyQt4.QtGui import * import sys import urllib.request class Downloader(QDialog): def __init__(self): QDialog.__init__(self) layout = QVBoxLayout() self.url = QLineEdit() self.save_location = QLineEdit() self.progress_bar = QProgressBar() download_button = QPushButton("İndir") browse_button = QPushButton("Göz at") self.url.setPlaceholderText("URL") self.save_location.setPlaceholderText("Dizin") self.progress_bar.setValue(0) self.progress_bar.setAlignment(Qt.AlignHCenter) layout.addWidget(self.url) layout.addWidget(self.save_location) layout.addWidget(browse_button) layout.addWidget(self.progress_bar) layout.addWidget(download_button) self.setLayout(layout) self.setWindowTitle("DOWNLOADER") self.setFocus() download_button.clicked.connect(self.download) browse_button.clicked.connect(self.browse) def download(self): url = self.url.text() save_location = self.save_location.text() try: urllib.request.urlretrieve(url, save_location, self.report) QMessageBox.information(self, "Bilgi", "İndirme tamamlandı") self.progress_bar.setValue(0) self.url.setText("") self.save_location.setText("") except: QMessageBox.warning(self, "Uyarı", "İndirme başarısız") return def report(self, blocknum, blocksize, totalsize): current = blocknum * blocksize if totalsize > 0: percent = current * 100 / totalsize self.progress_bar.setValue(percent) def browse(self): save_file = QFileDialog.getSaveFileName(self, caption="Kaydet", directory=".", filter="Tüm dosyalar (*.*)") self.save_location.setText(QDir.toNativeSeparators(save_file)) app = QApplication(sys.argv) dialog = Downloader() dialog.show() app.exec_()
Yorumlar