程序员人工智能通识程序园

【编程】自定义下载简书文章和图片

2019-05-31  本文已影响9人  zhyuzh3d

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
【专题】简书下载器:Python-Tkinter项目编程入门


继续本专题前面的文章。

梳理Tkinter界面

梳理后运行结果如下:


对应的main.py代码如下:

from tkinter import *
from tkinter import ttk
import time
import random
import modules.reqs as reqs  # 导入reqs请求函数
import modules.options as opts
from tkinter.scrolledtext import ScrolledText

# 创建窗体
root = Tk()
root.title('简书文章下载器')
root.resizable(width=False, height=False)
root.config(background='#EEE')


def run():  # 启动获取动作
    reqs.getAll(opts, [0], [4])


def refreshInfo():  # 信息的自刷新函数
    text = reqs.genInfoStr()
    text += '\nState:'+reqs.state
    text += '\nCurVol:'+reqs.curVol
    text += '\nCurArt:'+reqs.curArt
    text += '\nCurImg:'+reqs.curImg
    info.config(text=text)
    info.after(500, refreshInfo)


# 创建界面
rown = 0  # 占位符
ttk.Frame(root, height=10).grid() 

rown += 1  # header输入框
iptHeader = ScrolledText(root, height=1, width=50)
iptHeader.grid(row=rown, padx=10, pady=0, sticky=W)

rown += 1  # header输入框说明
label1 = ttk.Label(root, text='粘贴header,不要包含:打头的部分,去除if-none-match行')
label1.grid(row=rown, pady=0, padx=10, sticky=W)

rown += 1  # 占位符
ttk.Frame(root, height=20).grid(row=rown) 

rown += 1 # 文集序号输入框
iptVol = Text(root,height=1, width=50)
iptVol.grid(row=rown, padx=10, pady=0, sticky=W)

rown += 1  # vol输入框说明
label2 = ttk.Label(root, text='文集列表,请用逗号分隔,如0,1,2')
label2.grid(row=rown, pady=0, padx=10, sticky=W)

rown += 1  # 占位符
ttk.Frame(root, height=20).grid(row=rown) 

rown += 1 # 文集序号输入框
iptArt = Text(root,height=1, width=50)
iptArt.grid(row=rown, padx=10, pady=0, sticky=W)

rown += 1  # vol输入框说明
label3 = ttk.Label(root, text='文章列表,请用逗号分隔,如0,1,2')
label3.grid(row=rown, pady=0, padx=10, sticky=W)

rown += 1  # 占位符
ttk.Frame(root, height=30).grid(row=rown) 

# 运行按钮
rown += 1
bt = ttk.Button(root, text='开始下载', width=30,command=run)
bt.grid(row=rown, padx=10,ipady=10 ,pady=0, sticky='WE')

# 信息标签
rown += 1
info = ttk.Label(root, text='?/?')
info.grid(row=rown,  padx=10, ipady=10, ipadx=10, sticky=W)
info.after(500, refreshInfo)  # 自动循环更新

root.mainloop()

获取用户输入

在Tkinter中可以使用xxx.get('1.0',END)来获取输入内容,这里的1.0表示从头获取,END表示获取全部。

我们修改run函数:

def run():  # 启动获取动作

    hdrs=iptHeader.get("1.0",END)
    vols=iptVol.get("1.0",END)
    arts=iptArt.get("1.0",END)

    opts.headers=opts.str2obj(hdrs, '\n', ': ')

    volnarr=[]
    volsarr = vols.split(',')
    volnarr = map(lambda x: int(x), volsarr)
    volnarr=list(set(volnarr))

    artnarr=[]
    artsarr = arts.split(',')
    artnarr = map(lambda x: int(x), artsarr)
    artnarr=list(set(artnarr))

    reqs.getAll(opts, volnarr, artnarr)

然后运行main.py,从浏览器复制粘贴你的headers,然后设定文集列表和文章列表,点击按钮就能开始下载文章了。

自动保存和读取headers

每次都手工复制headers比较麻烦,我们为软件增加自动保存和读取headers的功能。

每次打开的时候自动尝试读取config.txt文件,填充到iptHeaders,然后每次运行都自动将输入框的文字保存到config.txt文件。

在最底部添加代码:

def writeHeaders():  # 将header写入到临时文件
    hdrs = iptHeader.get("1.0", END)
    with open(os.getcwd()+'/config.txt', 'a') as f:
        f.write(hdrs)

def  readHeaders(): #读取设置文件并填充到界面
    fpath=os.getcwd()+'/config.txt'
    if os.path.exists(fpath):
        f=open(fpath,'r')
        hdrs=f.read()
        iptHeader.insert(INSERT,hdrs)

readHeaders()

root.mainloop()

注意root.mainloop()要放在最后。

最后汇总

如果要打包成独立运行的软件(不安装python也可以运行),那么请参考这个文章:

【编程】用Py2app打包Python-Tkinter项目

整个项目代码已经同步到我的github中,你也可以从dist文件夹下找到mac版本的打包软件直接下载使用。地址是:

zhyuzh的简书下载器JianshuDownloader

整个项目暂时告一段落,全部文章已整理在:

【专题】Python-Tkinter项目编程入门


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

上一篇下一篇

猜你喜欢

热点阅读