Python İle Masaüstü Uygulama Geliştirme – 3

Bir önceki bölümde basit bir arayüz hazırlamıştık. Bu bölümde programımıza biraz işlevsellik katacağız.

İndirmek istediğimiz dosyanın URL adresini ve indirmek istediğimiz konumu yazıp, butona tıklayacağız ve indirme işlemi başlayacak. Progress bar ilerleme durumunu bize bildirecek.

Başlayalım

İlk yapmamız gereken butona tıkladığımız zaman ne olacağını söyleceğimiz handler’ı ayarlamak. Ama bunun öncesinde bir önceki bölümde yazdığımız kodlara minik bir güncelleme yapmamız gerek.

url, save_location, progress_bar değişkenlerimizin başına self ekledik çünkü bu değişkenlere farklı fonksiyonlar içinden de erişmemiz gerekecek.

Şimdi buton için bir event handler ayarlayamaya koyulabiliriz. Butona tıkladığımız zaman indirme işleminin başlamasını istiyoruz. İndirme işlemini gerçekleştirecek download() isimli bir metot ayarlayıp, bunu butonun clicked event’ına bağlayalım.

Projemizin son hali ise şimdilik şu şekilde:

download()

Şimdi dowload() metodumuzu doldurmaya geçebiliriz. İlk olarak kullanıcının girdiği URL ve dosya adresi bilgilerini alarak başlayalım.

text() metodu line edite girilen değeri string olarak döndürmeye yarıyor.

URL ve dosyanın kayıt dizini bilgilerini aldığımıza göre, indirme bölümüne geçebiliriz. Bunun için de urllib.request i import edeceğiz.

Dosyayı indirmek için urlretrieve() metodunu kullanacağız. Bu metoda parametre olarak url, kayıt konumu, reporthook göndereceğiz. reporthook bize indirmek istediğimiz dosyanın boyutunu, ne kadarını indirdiğini anlatan bazı bilgiler sunmaya yarıyor. reporthook için report isimli bir metot oluşturacağız. Bu metodumuz reporthooktan gelen verileri almak için 3 parametre alacak. blocknum, blocksize, totalsize

download() metodumuzun son hali:

Böylelikle butona tıkladığımız zaman URL adresi alınacak, belirttiğimiz konuma kayıt edilecek. Dosya indirme bilgileri de report() metodumuza bildirilecek. Şimdi report() metodumuzu progress bar’ı güncellemek için kullanabiliriz.

Progress Bar’ı Güncelleme

urlretrieve() bize dosya boyutunu ve ne kadarlık kısmını indirdiğini bildiren verileri gönderdiğine göre bu verileri alıp, progress bar’ı güncelleyebiliriz. report() metodumuzu şu şekilde ayarladık:

Şimdi metodumuzun içini dolduralım:

Bazı serverler dosya boyutu bilgisini göndermediği için if ile dosya boyutunu kontrol ediyoruz. Daha sonra basit bir matematiksel işlemle dosyanın indirilen boyutunu yüzdelik olarak hesaplayıp bu değeri progress bar’ı güncellemek için kullanıyoruz.

Volia!

Programımız tamam ve test etmek için buradaki linkten bir url alıp kopyalayabiliriz.

Dizin bölümüne dosyayı indireceğimiz konumu ve dosya adını yazıp butona tıklayabiliriz.

 

Bir Cevap Yazın