- 论坛徽章:
- 0
|
Python 下载器
来自 OSchina
代码] downloadfile.py
view sourceprint?
01
# coding=UTF-8
02
import wx;
03
from com.download import download;
04
import os;
05
class Downloadfile(wx.Frame):
06
def __init__(self):
07
#save file url;
08
self.saveURL = ""
09
wx.Frame.__init__(self,None,-1,"download",size=(400,150));
10
panel = wx.Panel(self,-1);
11
self.topLabel = wx.StaticText(panel,-1,"1,enter url 2, click save 3, start down")
12
self.topLabel.SetFont(wx.Font(18,wx.SWISS,wx.NORMAL,wx.BOLD))
13
self.label1 = wx.StaticText(panel,-1," url: ");
14
self.label1.SetFont(wx.Font(14,wx.SWISS,wx.NORMAL,wx.BOLD))
15
self.input1 = wx.TextCtrl(panel,-1);
16
#self.input1.SetInsertionPoint(0);
17
self.input1.Value = "http://archive.ibobar.com/files/huana/audio/elva/elva05.mp3"
18
self.saveBtn = wx.Button(panel,-1,"save");
19
self.Bind(wx.EVT_BUTTON,self.save,self.saveBtn)
20
self.button = wx.Button(panel,-1,"down");
21
self.Bind(wx.EVT_BUTTON,self.startDown,self.button);
22
self.gauge = wx.Gauge(panel,-1,100,(20,90),(350,25));
23
self.gauge.SetBezelFace(3);
24
self.gauge.SetShadowWidth(3);
25
self.gaugeLB = wx.StaticText(panel,-1,"0%");
26
self.gaugeLB.SetFont(wx.Font(14,wx.SWISS,wx.NORMAL,wx.BOLD))
27
self.multText = wx.TextCtrl(panel,-1,"",size=(400,100),style=wx.TE_MULTILINE)
28
#Add(window, proportion=0, flag=0, border=0, userData=None)
29
mainSize = wx.BoxSizer(wx.VERTICAL);
30
mainSize.Add(wx.StaticLine(panel),0,wx.EXPAND);
31
mainSize.Add(self.topLabel);
32
mainSize.Add(wx.StaticLine(panel),0,wx.EXPAND);
33
urlSizer = wx.FlexGridSizer(cols=2,hgap=5,vgap=5);
34
urlSizer.AddGrowableCol(1);
35
urlSizer.Add(self.label1,0,wx.Left);
36
urlSizer.Add(self.input1,0,wx.EXPAND);
37
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
38
btnSizer.Add((20,20), 1)
39
btnSizer.Add(self.saveBtn)
40
btnSizer.Add((20,20), 1)
41
btnSizer.Add(self.button)
42
btnSizer.Add((20,20), 1)
43
progressSizer = wx.BoxSizer(wx.HORIZONTAL);
44
progressSizer.Add(self.gauge);
45
progressSizer.Add((20,20), 0)
46
progressSizer.Add(self.gaugeLB);
47
textSizer = wx.FlexGridSizer(cols=2,hgap=5,vgap=5);
48
textSizer.AddGrowableCol(0);
49
textSizer.Add(self.multText,0,wx.EXPAND);
50
mainSize.Add(urlSizer,0,wx.EXPAND|wx.ALL,10);
51
mainSize.Add(btnSizer,0,wx.EXPAND|wx.ALL,10);
52
mainSize.Add(progressSizer,0,wx.EXPAND|wx.ALL,10);
53
mainSize.Add(textSizer,0,wx.EXPAND|wx.ALL,10);
54
panel.SetSizer(mainSize);
55
mainSize.Fit(self);
56
mainSize.SetSizeHints(self);
57
self.addLog("---------please select save file-------");
58
def addLog(self,t):
59
self.multText.AppendText(t+'\n');
60
def startDown(self,event):
61
self.addLog("---start download file");
62
down = download(self.input1.Value,self.saveURL,self.changeProgress,self.downComplete)
63
def getNameFromURL(self,url = ""):
64
ls = str(url).split("/");
65
return ls[len(ls)-1];
66
def save(self,event):
67
self.addLog("---start select save file");
68
woldcard= "All files(*.*)|*.*";
69
dialog = wx.FileDialog( None , "save file" , os.getcwd() , self.getNameFromURL(self.input1.Value) , woldcard , wx.SAVE);
70
if dialog.ShowModal() == wx.ID_OK:
71
self.saveURL = dialog.GetPath();
72
self.addLog("---selected file: " + self.saveURL )
73
dialog.Destroy();
74
def changeProgress(self,n=0):
75
self.gauge.SetValue(n);
76
self.gaugeLB.SetLabel( str(n)+'%')
77
def downComplete(self,event):
78
self.addLog("---------down complete ! ---------");
79
dlg = wx.MessageDialog(None,"download complete! " , "complete" , style = wx.OK)
80
code = dlg.ShowModal();
81
dlg.Destroy();
82
if __name__ == "__main__":
83
app = wx.PySimpleApp();
84
frame = Downloadfile();
85
frame.Show();
86
app.MainLoop();
[代码] download.py
01
# coding=UTF-8
02
import urllib;
03
import wx;
04
def download(url,filename="" , fun="" ,completeF=""):
05
def myreporthook(block_count,block_size,file_size):
06
if file_size == -1 :
07
print "can't download file";
08
else:
09
percentage = int( (block_count*block_size*100)/file_size );
10
fun(percentage);
11
if percentage > 100 :
12
print "100%";
13
else:
14
print "%d%%" % (percentage);
15
filehandler,m = urllib.urlretrieve(url,filename,reporthook = myreporthook );
16
print "done";
17
completeF();
18
return filehandler;
19
#if __name__ == "__main__":
20
# http = download("http://archive.ibobar.com/files/huana/audio/elva/elva05.mp3" , "e:/1.mp3"); |
|