对于我而言,python只是一种兴趣,并非软件专业,学习它真的需要动力坚持,以及闲暇时间的牺牲。作为一个初学者,曾经尝试过一点一点从语法基础来学,坚持一段时间后,因为实在是乏味,放弃了。当然只是比原来花费精力要少一些。
跟着视频,自己随便弄了个小项目,即时学习python也是为了让自己有兴趣学下去。下面是效果。最喜欢的周董 哈哈!
这个签名设计,我们是通过模拟签名网站,向其服务器发送请求然后将其内容显示在我们的窗口上。
换句话来说就是把浏览器的部分内容呈现在窗口上。
from tkinter import *
from tkinter import messagebox
from PIL import Image,ImageTk #显示窗口用的
import requests #获取网页内容需要用到(爬虫常用)
import re /#正则表达式
1.显示出大体窗口
root = Tk()
#标题
root.title('猫老板签名设计')
#窗口大小 宽 高
root.geometry('600x300')
#窗口初始位置
root.geometry('-500+200')
#标签控件 后面
前面的操作都是在我们设定的这个窗口上进
label = Label(root,text = '签名',font = ('华文行楷',20),fg = 'blue')label.grid(row =0,column=0)#设计输入框entry = Entry(root,font=('微软雅黑',20))entry.grid(row =0,column=1)#点击按钮button = Button(root,text = '设计签名',font=('微软雅黑',22) command=download)button.grid(row =1,column=0)#消息循环 显示窗口root.mainloop()
这是第一阶段的效果图
其中注意几点:
1 .grid pack place 定位常见的三种方式。
gird(格)这些控件显示的位置按照大致下图的格点来分布,行列都是从0开始
(格的划分不是这样的,只是示意其起点以及大致分布)
我们这里采用的是 gird
以上的代码编译是不成功的,因为在鼠标触发的事件我们还没有定义,在button的属性设置中 写command = download
2.类似lable button 等这些控件,面向这个对象,它有很多的属性可以直接设置。我们根据自己的需要设置好对应的字体,颜色,以及位置。
3.窗体出现的位置,大小,名称等这些用于修饰的东西,我们可以摸索着来,不断的实验,看看哪种好看,哪种美观。
2.编写下载函数。
def download():
startUrl ='http://www.uustv.com/'
#获取用户输入的姓名
name = entry.get()
#去空格
name = name.strip()
if name =='':
messagebox.showinfo('提示:','请输入用户名')
函数的上半部分可以都算是,对输入框内容的判断以及处理
我们要模拟的签名网站的网址是
http://www.uustv.com/
首先我们想这个网站的生成签名是如何做到的?
获取对话框的内容→访问服务器得到数据返回
所以我们要做的相当于模拟这个过程访问能生成这种签名的服务器,然后得到我们想要的
else:
date = {
'word':name,
'sizes':'60',
'fonts':'jfcs.ttf',
'fontcolor':'#000000'
}
result = requests.post(startUrl,data=date)
result.encoding = 'utf-8'
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。
发送请求的数据是怎么来的呢?
为了验证其正确性,换种签名形式,测试后发现是正确的,不同字体有不同的数据请求方式
知道了其数据方式,我们要来开始操作生成签名了
html =result.text
reg = '<div class="tu">.<img src="(.*?)"/></div>'
#正则表达 (.*?)全部都需要匹配
imagePath = re.findall(reg,html)
#获取图片的完整路径
imgUrl = startUrl + imagePath[0]
#获取图片内容
response = requests.get(imgUrl).content
先来说说看爬取图片的主要方式吧
打印出网页访问请求发现出现好多我们不需要的东西,因此我们要对数据进行一个筛选。
用正则表达式来筛选有效数据。
reg = '<div class="tu">.<img src="(.*?)"/></div>'#(.*?)#匹配到该位置,即该地址出现的所有东西,无论是什么只要在
正则这个符号代替的位置出现,我就匹配它

筛选后加上对应的网址就是我们需要的图片连接,得到链接我们就得可以进行下载了。
f = open('{}.gif'.format(name),'wb')
f.write(response)
#图片显示到窗口上
bm = ImageTk.PhotoImage(file ='{}.gif'.format(name))
label2= Label(root,image = bm)
label2.bm = bm
label2.grid(row = 2,columnspan= 2)
下载以后保存到本地,然后显示在窗体上,定义一个label2,对其属性进行改变,就可以调整图片的位置。基本上就完成了。虽然很简单的东西,但作为初学者,有好多东西都是查阅资料,问人等方式得到的。
最后附上源码
from tkinter import *
from tkinter import messagebox
from PIL import Image,ImageTk
import requests
import re
#模拟浏览器发送请求
def download():
startUrl ='http://www.uustv.com/'
#获取用户输入的姓名
name = entry.get()
#去空格
name = name.strip()
if name =='':
messagebox.showinfo('提示:','请输入用户名')
else:
date = {
'word':name,
'sizes':'60',
'fonts':'jfcs.ttf',
'fontcolor':'#000000'
}
result = requests.post(startUrl,data=date)
result.encoding = 'utf-8'
#获取网站的源代码
html =result.text
reg = '<div class="tu">.<img src="(.*?)"/></div>'
#正则表达 (.*?)全部都需要匹配
imagePath = re.findall(reg,html)
#获取图片的完整路径
imgUrl = startUrl + imagePath[0]
print(imgUrl)
#获取图片内容
response = requests.get(imgUrl).content
f = open('{}.gif'.format(name),'wb')
f.write(response)
#图片显示到窗口上
bm = ImageTk.PhotoImage(file ='{}.gif'.format(name))
label2= Label(root,image = bm)
label2.bm = bm
label2.grid(row = 2,columnspan= 2)
#创建窗口
root = Tk()
#标题
root.title('猫老板签名设计')
#窗口大小 宽 高
root.geometry('600x300')
#窗口初始位置
root.geometry('-500+200')
#标签控件
label = Label(root,text = '签名',font = ('华文行楷',20),fg = 'blue')
label.grid(row =0,column=0)
#设计输入框
entry = Entry(root,font=('微软雅黑',20))
entry.grid(row =0,column=1)
#点击按钮
button = Button(root,text = '设计签名',font=('微软雅黑',22)
,command =download)
button.grid(row =1,column=0)
#消息循环 显示窗口
root.mainloop()