免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2585 | 回复: 0
打印 上一主题 下一主题

练习:Python版小型下载工具 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-23 15:29 |只看该作者 |倒序浏览
刚学Python,震惊于它的简洁和轻松。
现在发第一篇帖子,用来练习基本的urllib模块和Tkinter模块。

# _*_ coding: utf-8 _*_
import urllib
from Tkinter import Scale, Button, StringVar, Label,\
Text, Frame, Tk, LEFT, Entry, HORIZONTAL
#from Tkinter import *
import time
import tkMessageBox
import re
   
top = Tk()
top.title('Python版小型下载工具')
topLabel = Label(top, text='Python Download v1.1')
topLabel.pack()
urlString = StringVar(top)
pathString = StringVar(top)
urlFrame = Frame(top)
urlLabel = Label(urlFrame, text='URL地址')
urlLabel.pack(side=LEFT)
urlEntry = Entry(urlFrame, width=50, textvariable=urlString)
urlEntry.pack(side=LEFT)
urlFrame.pack()
pathFrame = Frame(top)
pathLabel = Label(pathFrame, text='保存地址')
pathLabel.pack(side=LEFT)
pathEntry = Entry(pathFrame, width=50, textvariable=pathString)
pathEntry.pack(side=LEFT)
pathFrame.pack()
proFrame = Frame(top)
proLabel = Label(proFrame, text='进度%')
proLabel.pack(side=LEFT)
proSacle = Scale(proFrame, length=300, from_=0, to=100.0,
                 resolution = 0.01,
                 orient=HORIZONTAL)
proSacle.pack(side=LEFT)
proFrame.pack()
buttonFrame = Frame(top)
downButton = Button(buttonFrame, text='下载',
#                    command=downFunc,
                    activeforeground='white',
                    activebackground='blue')
downButton.pack(side=LEFT)
quit = Button(buttonFrame, text='退出',
              command=top.quit,
              activeforeground='white',
              activebackground='red')
quit.pack(side=LEFT)
buttonFrame.pack()
def downFunc():
    url = urlString.get()
    if url == '':
        tkMessageBox.showwarning('Error', 'URL地址为空!')
    elif re.match('http://|ftp://',url) is None:
        tkMessageBox.showwarning('Error', '错误类型的URL地址!!')
    path = pathString.get()
    if path == '':
        tkMessageBox.showwarning('Error', '保存地址错误!')
    try:
        (filename, mine_hdrs) = urllib.urlretrieve(url, path, reportHook)
    except IOError, e:
        print e
        pass
    else:
        tkMessageBox.showinfo('Info','download %s finished'%filename)
        top.update()
downButton.configure(command=downFunc)
   
def reportHook(blocknum, bs, size):
    transBytes = blocknum*bs
    a = float(transBytes)/size*100
    proSacle.set(a)
    top.update()
top.mainloop()

下一步的工作是集中于downFunc函数的处理,以及用OOP处理整个程序。
请教各位高手一个问题,怎样在一个类里面处理Hook(钩子)函数?上面程序def reportHook(blocknum, bs, size)是一个钩子函数,Python规定其参数为3个。如果将其放到类里面,则应要4个函数,这样一来就无法调用了。不知大家是怎么处理这个问题的。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/101606/showart_2004731.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP