爬虫+Tkinter综合练习——个性签名设计器

python版本:3.6
需手动安装python库列表:

  • requests
  • pillow(注意:项目中的PIL库的安装并不是pil,而应该是pillow)

浏览器:火狐浏览器

 

完成效果:

项目分析:

  • 设计界面
  • 获取设计签名图片
  • 下载图片并显示

一、设计界面

from tkinter import *
from tkinter import messagebox
from tkinter import ttk        # 注意:下拉列表在ttk中
from PIL import ImageTk

window = Tk()        # 创建窗体

window.geometry('535x345')                # 设置窗体大小
# 关于为什么窗体是这个大小的问题,本人宽度是参照生成图片的宽度的,高度就自己测了
window.resizable(0,0)                     # 设置固定窗体尺寸
window.title('个性签名设计器')              # 设置窗体名称
window.iconbitmap('./image/icon.ico')     # 设置窗体图标

Label(window,text='姓名:',font=('华文行楷',20)).place(x=20,y=20)
name_entry = Entry(window,font=('华文行楷',20))
name_entry.place(x=120,y=20)
Label(window,text='字体:',font=('华文行楷',20)).place(x=20,y=80)
font_box = ttk.Combobox(window,width=10,height=1,font=('华文行楷',20))
font_box.place(x=120,y=80)
# 通过设置下拉列表的'value'属性可以添加选项
font_box['value'] = ('个性签','连笔签','潇洒签','草体签','合文签','商务签','可爱签')
font_box.current(0)    # 下拉列表默认项下标

def get_image():
    name = name_entry.get()
    print(name)

Button(window,width=10,height=3,text='生成签名',font=('华文行楷',20),command=get_image).place(x=380,y=20)

bm = ImageTk.PhotoImage(file='./image/空白.gif')    # 读入图片
# 可以先到网站下载一张空白的图片占位,这样生成之后不会显得很突兀
label_image = Label(window,image = bm)
label_image.bm = bm
label_image.place(x=0,y=140)

window.mainloop()

如果有相关Tkinter控件参数不了解的,可自行百度,或者参考本人写的相关Tk的文章,相信讲的已经非常清楚了,如还有疑问,请在下面留言!!!

二、获取设计签名图片

思路分析:

  • 获取请求网址地址:http://www.uustv.com/
  • 提交的信息:
            名字
            字体
            ……
  • 获取生成图片地址

网站分析:

网站初始界面
网站初始界面
  1. 按快捷键“Ctrl+Shfit+E”,弹出网络窗口,这样我们就可以看见网页的请求信息,然后再作分析;
  2. 填好信息,发送请求,我们翻到第一个,点击它,就可以看到请求信息了

    通过这个信息我们可以知道如下信息:
            请求网址:http://www.uustv.com/
            请求方法:POST
  3. 点击右边的选项卡“参数”,查看提交的参数信息

    从中我们可以知道,我们提交了四个数据:
            关键字(名字):苹果
            字体大小:60
            字体:jfcs.ttf
            字体颜色:#00000000
  4. 右击生成的图片,点击“审查元素”,查找生成图片的地址

代码分析:

import requests
import re

# 设置请求参数
data = {
    "word": '苹果',
    "sizes": "60",
    "fonts": 'jfcs.ttf',
    "fontcolor": "#000000"
}

url = 'http://www.uustv.com/'        # 设置请求网址
result = requests.post(url,data)     # 发送请求,获取返回信息
result.encoding = 'utf-8'            # 设置编码格式
# 注意:如果不设置编码格式,有可能会乱码,网页编码格式可以通过源码的“charset”属性获得,搜索一下即可
html = result.text                   # 获取返回源码

reg = f'<div class="tu"><img src="(.*?)"/></div>'    # 设置正则表达式检索规则
img_path = re.findall(reg,html)                      # 根据检索规则搜索源码,提取图片地址
img_adress = url + img_path[0]                       # 补全图片地址
image = requests.get(img_adress).content             # 获取图片内容

# 将获取到的二进制信息写入文件并保存
with open('苹果.gif','wb') as f:
    f.write(image)

三、完整代码

from tkinter import *
from tkinter import messagebox
from tkinter import ttk
from PIL import ImageTk
import requests
import re

window = Tk()

window.geometry('535x345')
window.resizable(0,0)
window.title('个性签名设计器')
window.iconbitmap('./image/icon.ico')

Label(window,text='姓名:',font=('华文行楷',20)).place(x=20,y=20)
name_entry = Entry(window,font=('华文行楷',20))
name_entry.place(x=120,y=20)
Label(window,text='字体:',font=('华文行楷',20)).place(x=20,y=80)
font_box = ttk.Combobox(window,width=10,height=1,font=('华文行楷',20))
font_box.place(x=120,y=80)
font_box['value'] = ('个性签','连笔签','潇洒签','草体签','合文签','商务签','可爱签')
font_box.current(0)
font =  {
            '个性签':'jfcs.ttf',
            '连笔签':'qmt.ttf',
            '潇洒签':'bzcs.ttf',
            '草体签':'lfc.ttf',
            '合文签':'haku.ttf',
            '商务签':'zql.ttf',
            '可爱签':'yqk.ttf'
        }

def get_image():
    name = name_entry.get()
    name = name.strip()
    if name == '':
        messagebox.showwarning('警告',message='请输入你的姓名')
    else:
        fonts = font[font_box.get()]

        data = {
            "word": name,
            "sizes": "60",
            "fonts": fonts,
            "fontcolor": "#000000"
        }

        url = 'http://www.uustv.com/'
        result = requests.post(url,data)
        result.encoding = 'utf-8'
        html = result.text

        reg = f'<div class="tu"><img src="(.*?)"/></div>'
        img_path = re.findall(reg,html)
        img_adress = url + img_path[0]
        image = requests.get(img_adress).content

        with open('{}.gif'.format(name),'wb') as f:
            f.write(image)

        bm = ImageTk.PhotoImage(file='{}.gif'.format(name))
        label_image = Label(window,image = bm)
        label_image.bm = bm
        label_image.place(x=0,y=140)

Button(window,width=10,height=3,text='生成签名',font=('华文行楷',20),command=get_image).place(x=380,y=20)

bm = ImageTk.PhotoImage(file='./image/空白.gif')
label_image = Label(window,image = bm)
label_image.bm = bm
label_image.place(x=0,y=140)

window.mainloop()

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值