前言
这是一次想 实现进度条功能 而引发的小程序开发,越做发现涉及的东西越多,本文只做简单成效实现过程的描述,优化项目以后再做补充。
目录
概述
先上效果图
功能介绍
该下载器只能下载已知工具包(即将例如 QQ、python、nginx 等包文件的链接复制粘贴到那个链接 Entry 里),通过点按打开按钮,选择要存放的目录。
视频质量下拉菜单和暂停下载功能暂未实现,有待后期补充,如有大神,请指点一二。
源代码
本程序基于 Python 3.6.6 编写,如用 3.x 版本编辑,问题应该不大,请自行解决。
后期生成 exe 程序,需要用到 PyInstaller,我用的版本是 3.3.1。
实现下载器功能
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/8/27 15:40
# @Author : Nimo
# @File : study.py
# @Software: PyCharm
import os
import urllib
import time
import requests
from tkinter import *
from tkinter.scrolledtext import ScrolledText
from PIL import Image, ImageTk
import threading
from tkinter.filedialog import askdirectory
# 这里引入的两个包是为了后期生成exe程序用,源程序测试时请注释掉这两行以及后面的相关行
import base64
from picture.bak import img as logo
class GetFile(): #下载文件
def __init__(self, url, dir_path):
self.url = url
self.dir_path = dir_path
self.filename = ""
self.re = requests.head(self.url, allow_redirects=True) # 运行head方法时重定向
# url and path 有效性检查
def _is_valid(self):
if self.url is '':
scrolled_text.insert(INSERT, '请输入包件链接...\n')
scrolled_text.see(END)
return None
else:
pattern = '^(https|http|ftp)://.+$'
# pattern = '^(https|http:)//([0-9a-zA-Z]*\.[0-9a-zA-Z]*\.(com|org)/).+$'
url_pattern = re.compile(pattern, re.S)
result = re.search(url_pattern, self.url)
if result is None:
scrolled_text.insert(INSERT, '错误的链接,请重新输入...\n')
scrolled_text.see(END)
return None
else:
if self.dir_path is '':
scrolled_text.insert(INSERT, '请输入包件保存路径...\n')
scrolled_text.see(END)
return None
else:
path_pattern = re.compile('(^[A-Z]:/[0-9a-zA-Z_]+(/[0-9a-zA-Z_]+)*$)|(^[A-K]:/[0-9a-zA-Z_]*$)',
re.S)
result = re.search(path_pattern, self.dir_path)
if result is None:
scrolled_text.insert(INSERT, '错误的文件路径,请重新输入...\n')
scrolled_text.see(END)
return None
else:
return