自动化预约学校健身房v3.0——tkinter实现gui,多线程实现日志实时输出

如果不了解背景的,建议先去看看v1.0这个版本的文章

声明:本文仅供学习交流,不针对学校及个人,无意破坏竞争公平性。

题外话:
接下来为什么直接就是v3.0呢,是因为v2.0(在v1.0的基础上增加了GUI)早就写出来了,只是没发文章,当时觉得连带着日志一块搞出来发文章得了,结果一下子多肝了四天时间。。
遇到太多问题了,太多bug了,只能一点点想办法,一点点解决。
在这里插入图片描述

介绍一下版本更迭:
v1.0:(实现自动维持token时效、提交预约请求和发送短信提醒)
v2.0:(新增GUI,方便操作)
v3.0:(新增日志功能,实时输出请求结果)

以下内容对照v1.0的文章阅读,体验更佳

先上效果图:
(为了展示方便,我将定时时间改得短了点,效果是相同的。)
那么,,,,在这里插入图片描述运行结果gif
短信:
在这里插入图片描述
当然,这会健身房约不到,如果设置成正确的时间点约的话,就可以成功啦。

1. 修改详情

1.1 请求函数

v1.0发送网络请求的两个函数做出一点点修改:
具体功能不变,给两个函数加了参数(方便前后端交互),分别对应新增了函数返回值(为了将其输出在GUI界面上)。

def keep_token(token):
# url部分遮挡了,自己改喔
    url = "https://xxx.xxx.xxx.xxx/gym/?state=1#/pages/index"	
     # 字典格式,推荐使用,它会自动帮你按照k-v拼接url
    myParams = {
   "token": token}   
    # 发送请求
    res = requests.get(url=url, params=myParams)
    # 如果响应码是200,也就是访问成功
    if res.status_code == 200:
        str1 = '成功:维持token时效...   ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    #访问失败
    else:
        str1 = '失败:维持token时效...   ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        send_message.send('token刷新异常,可能导致预约失败,请尽快查看。')
    return str1
def oppoint(token,ptId):
    # url部分遮挡了,自己改喔
    url = "http://xxx.xxxx.xxx.xxx/ccms-gym/gym/queue/appointMulti"
    #通过信息收集可知,dateId是日期id,1表示今天,2表示明天;ptId是时间段id,每个时间段对应一个id,打开网页F12就能看见。
    myParams = {
   "token": token, "dateId": 2, "ptId": ptId,
                "areaId": 3}  
    #发送请求
    res = requests.get(url=url, params=myParams)
    #请求成功
    if res.status_code == 200:
        chinese = re.findall('[\u4e00-\u9fa5]', res.text)  # 汉字的范围为"\u4e00-\u9fa5"
        tips = ''
        for i in range(len(chinese)):
            tips = tips + chinese[i]
        str2 = tips + '                  ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        send_message.send(tips)
    else:
        str2 = '预约失败...      ' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        send_message.send('请求失败,可能导致预约失败,请尽快查看。')
    return str2

1.2 多线程并行执行

具体代码在后面的my_window类里面有,主要是摒弃了schedule的定时,转而以sleep为基础自己写了个定时执行的代码,加了一个线程(实时输出日志),全部封装在了my_window类里面了。

1.3 发送短信

主体没变,只是把print()去掉了,因为我要完全实现后台运行+GUI上显示。

2. 本例中的GUI各组件详解

不得不说,单纯实现GUI太简单了,把它和后端代码联系起来运行也不难,这个tkinter库我完全没玩过,花了一个下午边看边写界面就整好了,最要命的还得是这个日志实时输出,写出来之后觉得我当时就是个傻x,但是当时钻了牛角尖是真的一点办法都没有,记录此文章也算给我长长记性。

以下代码注释非常详细,对代码本身的解释少一点,参考注释应该可以看懂

2.1 创建输入框

# 创建token输入框
    def get_token(self):
        # 创建l1标签
        l1 = tkinter.Label(win, text='请输入token:', justify=tkinter.RIGHT, width=50)
        l1.place(x=20
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Godchar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值