做一款属于自己的“签名设计软件”,外行玩儿过都说牛逼

简介: 做一款属于自己的“签名设计软件”,外行玩儿过都说牛逼

1.概述

昨天我们已经详细的介绍了,怎么使用Thinter创建属于自己的窗口界面了。整体布局呢我们已经搭建起来,唯一没有实现的一个步骤就是,用户每输入一个名字,就会将个性签名一并显示在这个窗口界面中,今天我就带着大家一起完成这个需求。如果你对Thinter的使用还不熟悉的话,赶紧去看看昨天的文章。Thinter的使用方法


今天的文章可以看成是爬虫+Thinter窗口的结合。昨天我们完成了Thinter窗口搭建过程,今天需要做的就是利用爬虫得到我们最终想要的个性化签名。网上在线签名网站特别多,我也是任意选取了百度首页排在第一位的那个在线签名网站。现在把网站提供给大家,大家可以看看。http://www.uustv.com/


2.网页分析

1)网页缺陷

这个文章有一个不好的地方,就是你输入一些空格,网站就给你显示一个空白(如图所示)。

image.png

我们在写代码的时候,可不能这样,要避免这个问题的发生。我的想法是这样的,如果你输入为空,我就弹窗提醒你。

image.png


2)页面分析

从图中可以发现,我们在输入框每输入一个名字,进行查询后。相当于给服务器发送了一次post请求,post请求的表单共有四个,从图中可以很清晰地看出来。总的来说,这个网站还image.png是挺简单的,会一些简单的爬虫都可以完成,我这里就不详细介绍了。



3)数据的获取

怎么查看网页源代码,相信大家不用我说了吧。我们想要获取的数据,一般的网址是会直接显示在源代码中,比如说今天这个网站,但是对于大多数网站就不一定了。通过定位我们发现,最终想要的个性签名图片,位于class="tu"的div标签中,我已经用红色方框标注出来了,由于我们只是获取这一条信息,就直接使用正则表达式来获取好了。

image.png


3.完整代码

通过上述说明,我们已经将准备工作做好了,现在可以书写代码了。这里有几个知识点昨天还没有讲述到,就简单提一下。


entry.get()获取用户输入。我们在输入框输入什么,这里可以捕捉到;

messagebox.showinfo()能够完成弹窗提示,和VBA有点像;

from tkinter import *
from tkinter import messagebox
import requests
import re
from PIL import Image,ImageTk
def func():
    # 获取窗口输入的名字
    name = entry.get()
    print(name)
    # 去掉空格
    name = name.strip()
    # 判断:如果用户输入为空,显示
    if name == "":
        messagebox.showinfo("提示",message="请输入完整的名字")
    else:
        # 请求网站,获取图片
        data = {
            'word': name,
            'sizes': '60',
            'fonts': 'yqk.ttf',
            'fontcolor': ''#000000'
        }
        url = "http://www.uustv.com/"
        result = requests.post(url,data)
        result.encoding = "utf-8"
        html = result.text
        pattern = r'<img src="(.*?)"/></div>'
        img_path = re.findall(pattern,html)[0]
        img_url = url + img_path 
        # 写入到本地
        with open(f'{name}的签名照.gif', "wb") as f:
            f.write(requests.get(img_url).content)
        # 将图片展示在窗口上
        bm = ImageTk.PhotoImage(file=f'{name}的签名照.gif')
        label2 = Label(root,image=bm)
        label2.bm = bm
        label2.grid(row=3,columnspan=2)
# 创建窗口:实例化一个窗口对象。
root = Tk()
# 窗口大小
root.geometry("540x305+374+182")
#  窗口标题
root.title("我的个性签名设计")
# 添加标签控件
label = Label(root,text="签名:",font=("宋体",25),fg="red")
# 定位
label.grid()
# 添加输入框
entry = Entry(root,font=("宋体",25),fg="black")
entry.grid(row=0,column=1)
# 添加点击按钮
button = Button(root,text="签名设计",font=("宋体",25),fg="blue",command=func)
button.grid(row=1,column=1)
# 显示窗口
root.mainloop()


效果如下:

image.png


4.总结

为了更好的在不懂行的面前装逼,我最终也将程序使用pyinstaller打包了。这样你就可以发给那些文科妹子装装逼,不是很好吗?也会一并提供给大家。


本文有两个遗留问题,可以交给大家解决一下。其一,原网站可以进行签名设计的字体切换,我这个在代码中没有体现出来,你可以自行研究一下。其二,使用pyinstaller打包后的程序,虽然可以运行,但是好慢呀,大家有什么好方法,可以告诉我一下。


 


相关文章
用于演化博弈中,列出复制动态方程后,求解复制动态方程的均衡点
用于演化博弈中,列出复制动态方程后,求解复制动态方程的均衡点
|
SQL 关系型数据库 数据库连接
python库之—psycopg2
python库之—psycopg2
|
XML 分布式计算 监控
Oozie工作流管理系统设计与实践:面试经验与必备知识点解析
【4月更文挑战第9天】本文详述了Oozie工作流管理系统的核心概念,包括安装配置、Workflow XML、Action、Coordinator和Bundle XML定义。此外,讨论了工作流设计实践,如监控调试、自动化运维,并对比了Oozie与其他工作流工具的差异。文中还分享了面试经验及解决实际项目挑战的方法,同时展望了Oozie的未来发展趋势。通过学习,读者能提升Oozie技术能力,为面试做好充分准备。
290 0
|
3月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
222 0
|
8月前
|
测试技术 AI芯片
服务化参数调优实战
本文介绍了服务化性能调优的全流程,以Llama3-8B模型为例。首先需完成MindIE环境安装、下载模型权重与测试数据集。接着通过计算npuMemSize和maxBatchSize,maxPrefillBatchSize(272)与maxPrefillTokens,并更新配置进行性能测试。结果显示,参数调优后吞吐量提升18%。此方法为大模型性能优化提供了实用指导。
|
5月前
|
人工智能 JavaScript 前端开发
Playwright自动化测试系列课(5) | ​​调试神器实战:Trace Viewer 录屏分析 + AI 辅助定位修复​
Playwright 的 Trace Viewer 提供录屏级追踪,还原测试全过程,帮助定位偶发故障。结合 AI 实现自动修复,大幅提升调试效率,成为自动化测试利器。
|
8月前
|
人工智能 Java API
DeepSeek R1 集成难题完美解决:DeepSeek4j来帮你解决
DeepSeek R1 是一款强大的 AI 模型,但在 Java 生态中集成存在诸多挑战,如思维链丢失、参数限制和流式处理不完善等问题。DeepSeek4j 的出现解决了这些难题,它专为 Java 开发者设计,支持完整思维链保留、流畅的流式响应和简单优雅的 API。通过与 Spring Boot 的无缝集成,开发者只需几行代码即可快速接入 DeepSeek R1。此外,DeepSeek4j 提供调试页面、性能优化功能(如 GPU 加速和模型缓存),助力开发者高效利用 AI 技术,推动智能化应用落地。
|
8月前
|
存储 人工智能 分布式计算
阿里云服务器实例规格选择参考:如何根据业务场景选择适合自己的实例规格
在我们购买阿里云服务器的时候,阿里云提供了众多的云服务器实例规格,满足了不同行业、不同业务场景的多样化需求。然而,面对众多的实例选择,如何根据自身的业务特性,挑选出最合适的云服务器实例规格,成为了众多用户,尤其是新手用户比较关心的问题。本文旨在通过深入剖析阿里云服务器的各类实例规格,结合具体的业务场景,为您提供一份详尽的实例规格选择指南,以供参考和选择。
|
SQL 缓存 关系型数据库
MySQL Limit实现原理
本文详细探讨了MySQL中`LIMIT`子句的实现原理及其在不同场景下的应用。`LIMIT`用于控制查询结果的行数,结合`OFFSET`可实现分页查询。其内部实现涉及解析器、优化器和执行器三部分,通过索引利用、子查询优化等提升性能。文章还提供了性能优化策略,如索引优化、覆盖索引及延迟关联等,并给出实践建议。
446 3