手把手带你打造一款 签名设计 的GUI图形界面!
作者 | 黄伟呢
来源丨数据分析与统计学之美
1.概述
整体布局呢我们已经搭建起来,唯一没有实现的一个步骤就是,用户每输入一个名字,就会将个性签名一并显示在这个窗口界面中,今天我就带着大家一起完成这个需求。
今天的文章可以看成是爬虫+Tkinter窗口的结合。昨天我们完成了Tkinter窗口搭建过程,今天需要做的就是利用爬虫得到我们最终想要的个性化签名。网上在线签名网站特别多,我也是任意选取了百度首页排在第一位的那个在线签名网站。
2.网页分析
1)网页缺陷
这个文章有一个不好的地方,就是你输入一些空格,网站就给你显示一个空白(如图所示)。

我们在写代码的时候,可不能这样,要避免这个问题的发生。我的想法是这样的,如果你输入为空,我就弹窗提醒你。
2)页面分析
从图中可以发现,我们在输入框每输入一个名字,进行查询后。相当于给服务器发送了一次post请求
,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,ImageTkdef 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.textpattern = 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 = bmlabel2.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写了个使命召唤外挂
资讯
俄罗斯 Android 系统受限
技术
这个插件超赞!还能自动生成代码
技术
一行Python代码能干嘛?来看!
分享
点收藏
点点赞
点在看
相关文章:

跨域资源共享 CORS
简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。…

SMARTY核心
http://www.smarty.net/http://smarty.php.net/manual/en/1.配置define("ROOTPATH",dirname(__FILE__)."/../");require_once("smarty/Smarty.class.php");/*** Smarty Template Class Initializtion*/if( constant( "ENABLED_TPL" ) …

5G+XR:让视频增强技术在工业领域大有所为
据工业和信息化部统计显示,目前中国累计建成并开通5G基站142.5万个,基站总数今年有望突破200万个。自5G正式商用以来,凭借其高带宽、广连接、低延时等优势,5G应用的实践逐渐从最初的单一化业务触及至更广泛的行业应用场景中。其中…

IE的安全性设定增加“我的电脑”的安全性设定
HKEY_CURRE-NT_USER\Software\Microsoft\Windows\CurrentVersion\InternetSettings\Zones\0,在右边窗口中找到DWORD值“Flags”,默认键值为十六进制的21(十进制33),双击“Flags”,在弹出的对话框中将它的键值改为“1”即可&#x…

F# 4.5提供Spans、Match!等特性
F# 4.5预览版现已发布,其中提供了一系列新特性,包括对.NET Core 2.1的新原生类型Span\u0026lt;T\u0026gt;的支持、新关键字Match!等。\\类型Span意在实现底层代码指针操作的安全性和可预测性,这可使得很多情况下不必再分配内存,进…

ecshop transport.js/run() error:undefined
在使用ECshop的AJAX(即:transport.js) IE有时候会出现:ReferenceError: process_request is not defined,FF则出现:transport.js/run() error:undefined,其实这完全和transport.js无关。那么问题出在哪里呢?…

为什么你不应该自行更新 Drupal 网站?
(译注:这篇文章主要还是针对于非专业人员及个人Drupal站长,对于专业的 Drupal 团队和公司而言 Drupal 的升级更新都有规范的操作流程,完全是家常便饭,不可能出现文中出现的这些情况。尽管如此,里面也还是有…

用友发布新一代企业智能商旅及费控服务平台
3月31日,“便捷商旅 智能费控—2022用友BIP|商旅及费控服务新品发布会”成功举行。作为新一代企业智能商旅及费控服务平台,用友BIP商旅及费控服务以“连接 高效 智能 合规”为核心价值理念,致力于让5000万报销人拥有极致的体验,让…

RNN,LSTM,GRU简单图解:
一篇经典的讲解RNN的,大部分网络图都来源于此:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ 每一层每一时刻的输入输出:https://www.cnblogs.com/lovychen/p/9368390.html 带有权重标识的图:

ecshop模板smarty foreach详解 [ECshop]
{foreach},{foreachelse}{foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标…
自己动手,做一款抬头显示的「Todo Hud」
我用过好多款 TodoList 软件,但事情一多总还是丢三落四,原本计划好要做的事情总是安静地躺在某个角落,等我想起来要去扫一眼的时候,都已快「物是人非」。。。 要是能在桌面上实时显示 TodoList,那该多好!但…

微软语音扩展全球语言支持,发布160个新声音
导语:全世界有数千种语言,最具语言天赋的人也只能说数十种,普通人能够学会两三种语言已属不易。然而,在科技日新月异的今天,具备自然语言对话能力的AI已经能够掌握上百种语言,扩展人类自身能力,…

P4269 [USACO18FEB]Snow Boots G
思维题。 以地板为序构造链表,再排序,然后删除走不过去的地面。 删除的时候顺便维护最大的跨度,以此判断可行性。 总的来说利用了答案的单调性。 #include <cstdio> #include <cstring> #include <iostream> #include <…

GPT-3:现实版的“贾维斯”?还是真「人工」智能?
整理 | 章雨铭 责编 | 屠敏出品 | CSDN(ID:CSDNnews)GPT-3(Generative Pre-trained Transformer 3)自2020年推出以来就备受热议,它是一种由OpenAI开发的AI工具。发布的两年来,外媒The Verg…

SVN更换修改用户名
如果装了TortoiseSVN: Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息;当再次用到svn时,会提示输入用户名密码,输入新的用户名密码即可。 或者,手动删除下面目录下…

启用CORS实现Ajax跨域请求
2019独角兽企业重金招聘Python工程师标准>>> 应用场景:想从a.com请求b.com上的资源,由于同源策略不允许请求。 解决办法:在请求的php文件中加入 header("Access-Control-Allow-Origin: http://b.com"); 这种比较安全&am…

Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集
Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1.1 数据科学/机器学习的工作 流程 2 1.1.1 获取 2 1.1.2 检查和探索 2 1.1.3 清理和准备 3 1.1.4 建模…

虚拟机安装CentOS以及SecureCRT设置【完美无错版】
一、CentOS简介CentOS是Linux的发行版之一,它安全、稳定、高效,是我最喜欢的Linux发行版之一。CentOS根据Red Hat Enterprise Linux开放源代码编译而成,与RedHat Linux并没有什么本质上的差别。但Red Hat Enterprise Linux是商业软件…

Python 实现机器学习前后端页面的交互
作者 | 俊欣来源丨关于数据分析与可视化对于机器学习爱好者而言,很多时候我们需要将建好的模型部署在线上,实现前后端的交互,今天小编就通过Flask以及Streamlit这两个框架实现机器学习模型的前后端交互。模型的建立首先是模型的建立ÿ…

webpack入门(二)what is webpack
webpack is a module bundler.webpack是一个模块打包工具,为了解决上篇一提到的各种模块加载或者转换的问题。 webpack takes modules with dependencies and generates static assets representing those modules. webpack以依赖模块和生成 静态的资源来代表这些模…

vSAN读者交流之1-要为不同时间的服务器选择合适的系统版本
近期在我的虚拟化群中,有两个问题比较典型:在比较老的服务器安装新的VMware ESXi 6.7或vCenter Server 6.7出错。在比较新的服务器安装比较旧的ESXi版本5.5出错。因为每个人的实验环境不同、条件不同,用不同的服务器做实验,或者为…

ecshop中ajax的调用原理
1:首先ecshop是如何定义ajax对象的。ecshop中的ajax对象是在js/transport.js文件中定义的。里面是ajax对象文件。声明了一个var Ajax Transport;对象和一个方法Ajax.call Transport.run;2:ecshop中ajax可以使用两种方式传递数据.一种是get方式,一种是p…

IOS7原生API进行二维码条形码的扫描
2019独角兽企业重金招聘Python工程师标准>>> //需要真机 #import "ViewController.h" #import <AVFoundation/AVFoundation.h>interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>//用于处理采集信息的代理 {AVCaptureSess…

元宇宙中可跨语种交流,Meta 发布新语音模型,支持128种语言无障碍对话
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融为一体。 然而,…

sql server几种读写分离方案的比较
原文:sql server几种读写分离方案的比较在生产环境中我们经常会遇到这种情况: 前端的oltp业务很繁忙,但是需要对这些运营数据进行olap,为了不影响前端正常业务,所以需要将数据库进行读写分离。 这里我将几种可以用来进行读写分离的…

Jquery和javascript常用技巧
var objSel document.getElementById("selOp"); //这是获取值 alert("当前值: " objSel.value); //这是获取文本 alert("当前文本: " objSel.options(objSel.selectedIndex).text);…

LeetCode刷题-1
数组-1.两数之和题目描述题目样例Java方法:暴力枚举思路及算法代码执行结果复杂度Java方法:哈希表思路及算法代码执行结果复杂度题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数…

测试驱动开发与行为驱动开发中的测试先行方法
Gil Zilberfeld将在 Agile Practitioners会议上举办小型研讨会,讨论测试先行(test first)方法,测试驱动开发(TDD)和行为驱动开发(BDD)的基础。 \\\ Test-First是一个很优秀的工具。它…

在jupyter notebook中同时安装python2和python3
环境 win10 已安装anaconda3 How 1.安装python27> conda create -n py27 python2.72. conda install --prefixD:\pyenv\py27 ipykernel(python27 指定路径:D:\pyenv\py27)3. activate py27(查看 conda info --envs)4. python -m ipykernel install --user5.启动j…

简化代码的微小修改
可选参数和命名实参 可选参数如果操作需要多个值,而有些值在每次调用的时候又相同,这时可以使用可选参数声明可选参数并在调用时省略它们#region 13-1声明包含可选参数的方法并调用static void Dump(int x, int y 20, int z 30)//声明包含了可选参数的…