Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21453
  • 博文数量: 3
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-22 17:14
文章分类

全部博文(3)

文章存档

2011年(1)

2009年(2)

我的朋友
最近访客

分类: Python/Ruby

2009-07-23 15:29:13

刚学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个函数,这样一来就无法调用了。不知大家是怎么处理这个问题的。

阅读(551) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Python 字符串模块--摘自《Python核心编程》

给主人留下些什么吧!~~