欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
【专题】简书下载器: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也可以运行),那么请参考这个文章:
整个项目代码已经同步到我的github中,你也可以从dist文件夹下找到mac版本的打包软件直接下载使用。地址是:
整个项目暂时告一段落,全部文章已整理在:
欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
每个人的智能新时代
如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~
END
网友评论