Python+Tkinter打造签名设计工具

林舟
林舟
发布时间:2026-10-15| 4人浏览过
原创

本文介绍如何使用Python结合Tkinter库与网络爬虫技术,开发一个个性签名设计工具。通过解析在线签名网站的POST请求,获取用户输入并生成签名图片,同时处理输入校验与界面交互,最终打包为独立应用。

1.概述

此前我们已详细讲解了如何利用Tkinter构建自定义窗口界面。目前整体布局框架已搭建完毕,唯一尚未实现的功能是:当用户输入姓名时,系统需同步在窗口中展示对应的个性签名。本文将指导大家完成这一功能模块的开发。

本文内容可视为网络爬虫技术与Tkinter窗口程序的结合应用。在昨日完成Tkinter窗口基础搭建的前提下,今日的核心任务是通过爬虫技术获取最终的个性化签名数据。鉴于市面上在线签名网站众多,本文选取了百度首页排名第一的在线签名网站作为目标进行开发。

2.网页分析

1)网页缺陷

该网站存在一个明显的缺陷:当用户输入包含空格时,网站会返回空白结果(如图所示)。

在编写代码时,必须规避此类问题。我的处理策略是:若检测到输入为空,则通过弹窗提示用户注意。

2)页面分析

从图中可以看出,每当在输入框中输入姓名并提交查询时,系统实际上向服务器发送了一次post请求。该请求的表单包含四个字段,图中已清晰展示。总体而言,该网站结构较为简单,具备基础爬虫知识即可实现数据抓取,此处不再赘述具体细节。

3)数据的获取

查看网页源代码的方法想必大家已熟知。通常情况下,目标数据会直接显示在源代码中,例如本文涉及的网站;但大多数网站并非如此。通过定位分析发现,最终所需的个性签名图片位于class="tu"的div标签中,图中已用红色方框标注。由于仅需获取这一条信息,直接使用正则表达式提取即可。

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()

运行效果如下:

4.总结

为了在非技术人士面前展示成果,我最终使用pyinstaller将程序打包。这样可以将程序分享给朋友,增加趣味性,同时也一并提供给大家。

本文遗留了两个问题供读者思考解决:首先,原网站支持签名字体切换,而本代码未体现此功能,可自行研究实现;其次,使用pyinstaller打包后的程序运行速度较慢,请大家自行探讨优化方案。

以上就是Python+Tkinter打造签名设计工具的详细内容,更多关于Python Tkinter签名设计的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。