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.
İ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 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
Ş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_()
Celery ile alakalı "best practice"leri ve faydalı araçları bir araya getiren güzel bir checklist'e denk…
Diziler en temel ve sık kullandığımız araçlardan... Kod yazarken işimizi kolaylaştıracak, daha temiz kod yazmamızı…
listve tuple bilginizi test etmek ister misiniz? realpython.com da keşfettiğim ve Türkçe'ye çevirdiğim mini teste…
Rehberlik sağlaması ve bilgi tazelemesi açısından faydalı olduğunu düşündüğüm bir Toptal blog paylaşımınıTürkçe'ye çevirdim.Devamını okuyunBilmeniz…
Angular componentlerine console üzerinden hızlıca erişmek için kullanılan bir teknik. Unutmamak için kendime not düşüyorum.Devamını…
Geçtiğimiz günlerde keşfettiğim ve oldukça da hoşuma giden repoyu paylaşmak istiyorum: lydiahallie/javascript-questions Genel olarak temel…