PDA

Tam Sürümünü Görmek İçin : Dosya indirme uygulaması... (python)


osx
09/02/2007, 04:15
Selamlar...
Arkadaşlar python'da urllib ve Tkinter modüllerini kullanarak basit bir uygulama yazdım, kodlarda istediğiniz gibi değişiklik yapabilirsiniz ama iş ticarete dönüşmesin :)...Yaptığınız geliştirmeleri foruma eklerseniz herkes faydalanabilir ve herkesin yararına olur!.. Uygulama basitte olsa bazen işe yarayabiliyor :)...

# -*- coding: cp1254 -*-
# +-------------------+
# | mehmet3@gmail.com |
# +-------------------+
from Tkinter import*
import urllib
from tkFileDialog import *
yazilanuzanti= [("Tum Dosyalar","*"), #Uzantılar belirleniyor...
("Executable","*.exe"),
("ZIP","*.zip")]
def indir(): #indir fonksiyonu
global bilgi #"bilgi" nesnesi global olarak ayarlanıyor (değişiklik yapmak için)
try: #eğer bağlantı doğru sağlanırsa alt blok çalıştırılacak.
bilgi.config(text=u"Bağlanıyor...",fg="#000000")#mesaj yazdırılıyor.
u=urllib.urlopen(giris.get()) #bağlantı.
bilgi.config(text=u"Bağlandı...") #eğer bağlantı sağlanırsa mesaj yazdırılıyor.
dizin=asksaveasfilename(defaultextension = "" ,filetypes=yazilanuzanti)#kaydedilecek dizin belirleniyor.
if dizin: #eğer dizin işlemine devam edilirse alt blok çalışacak...
try: #eğer sorun çıkmazsa...
bilgi.config(text=u"İndiriliyor...") #mesaj yazdırılıyor.
d=open(dizin,"wb") #exe, zip vb... dosyalar için yazma şekli "wb" olmalıdır.
a=u.read() #indirilen dosya okunuyor -
d.write(a) #ve belirtilen dizine, belirtilen uzantı ile yazılıyor...
d.close() #yazıldıktan sonra kapatılıyor...
bilgi.config(text=u"İşlem tamamlandı...")#mesaj...
except: #eğer yazma işleminde hata varsa -
print "hata" #mesaj veriliyor...
bilgi.config(text=u"Hata...",fg="#FF0000")
else: #eğer dosya (dizin işlemi) menusu kapatılırsa mesaj yazdırılıyor.(bkz. yukarı "if dizin" :)
bilgi.config(text=u"İşlem iptal edildi...")
except: #bağlantı sağlanamazsa hata mesajı verilecek...
bilgi.config(text=u"Bağlantı hatası...",fg="#FF0000")
#------------yazı-k.k.y.s.t---------
kopyala=lambda:bilgi.event_generate('<Control-c>') #1 satırlık işlemler için "lambda" uygundur :)
kess=lambda:bilgi.event_generate('<Control-x>')
yapistir=lambda:bilgi.event_generate('<Control-v>')
sil=lambda:bilgi.event_generate('<Delete>')
tumunusec=lambda:bilgi.event_generate('<Control-/>')
def sag_tus(event):
try:
popup.tk_popup(event.x_root, event.y_root)
finally:
popup.grab_release()
#-------------------------------------
pencere=Tk()
pencere.geometry("250x110")
pencere.title(u"İndir...")
pencere.resizable(width=0,height=0)
#-------------------------------------
popup = Menu(pencere, tearoff=0) #kes,kopyala... menusu, tk'da yok :(
popup.add_command(label="Kes",command=kess)
popup.add_command(label="Kopyala",command=kopyala)
popup.add_command(label=u"Yapıştır",command=yapistir)
popup.add_command(label="Sil",command=sil)
popup.add_separator()
popup.add_command(label=u"Tümünü Seç",command=tumunusec)
#-------------------------------------
katman=LabelFrame(text="Link")
giris=Entry(katman)
giris.pack(fill=BOTH, expand=YES)
giris.bind("<Button-3>", sag_tus)
katman.pack(fill=BOTH, expand=YES,pady=5)

katman2=Frame()
indird=Button(katman2,text=u"İndir",relief = "ridge",borderwidth=1,command=indir)
indird.pack(fill=BOTH, expand=YES,side=LEFT)
kapat=Button(katman2,text=u"Kapat",relief = "ridge",borderwidth=1,command=pencere.quit)
kapat.pack(fill=BOTH, expand=YES,side=RIGHT)
katman2.pack(fill=BOTH)

bilgikatman=LabelFrame(text="Durum")
bilgi=Label(bilgikatman,text=u"İşlem yok.",font=('arial', '10'),fg="#000000")
bilgi.pack(side=LEFT)
bilgikatman.pack(fill=BOTH, expand=YES)

mainloop()
uygulamanın eksikleri var...


Yns
09/02/2007, 05:15
Keşke tkinter'da progress bar widget gibi bir şey olsaydı da geliştirebilseydik :)

Uygulama için teşekkürler.

etuschX
25/02/2007, 11:06
Linux kullanıcıları Boa constructor ile grafikleri daha kolay hazırlayabilir. Pythonwork isminde pythonware.com dan indirebileceğiniz bir program daha var. Dos ta da kullanılabilir. Ama artık geliştirilmediğinden biraz eski kalabilir.