主要是基於在線簽名網站做的。
步驟如下:
1.本地提供一個用python生成的界面,提供輸入姓名,簽名樣式選擇控件,簽名按鈕。
2.用戶輸入姓名,選擇樣式,點擊簽名按鈕後,把姓名傳到第三方簽名網站上進行簽名生成。
3.獲取簽名生成的圖片並保存到本地。
4.把本地的簽名圖片顯示在界面上。
from tkinter import *
from tkinter import messagebox, ttk
from PIL import Image,ImageTk
import requests
class NameSign:
'''
簽名程序類
'''
def __init__(self):
# 窗口
self.root = Tk()
# 窗口中放置輸入框
self.entry = Entry(self.root, font=("微軟雅黑", 15))
# 下拉框
self.cmb = ttk.Combobox(self.root, font=("微軟雅黑", 15))
# 下拉框內容
self.style = {"個性籤":"jfcs.ttf","連筆籤":"qmt.ttf","瀟灑籤":"bzcs.ttf",
"草體籤":"lfc.ttf","合文籤":"haku.ttf","商務籤":"zql.ttf","可愛籤":"yqk.ttf"}
def __window(self):
'''
窗口函數。生成窗口,設計窗口
:return:
'''
root = self.root
# 設置窗口的寬高座標
root.geometry('600x300+477+199')
# 設置窗口標題
root.title("簽名設計")
# 窗口中放置標籤
label = Label(root, text="簽名", font=("華文行楷"))
# 顯示出來
label.grid()
# 把輸入框在第0行,第1列顯示出來
self.entry.grid(row=0, column=1)
# 窗口中放置標籤
label2 = Label(root, text=" 樣式", font=("華文行楷"))
# 顯示出來
label2.grid(row=0, column=2)
# 下拉框
self.cmb.grid(row=0, column=3)
# 下拉框內容
self.cmb['value'] = tuple(self.style.keys())
# 默認選中
self.cmb.current(0)
# 窗口中放置按鈕,點擊後纔開始設計簽名
button = Button(root, text="設計簽名", font=("微軟雅黑", 20), command=self.__sign_and_save)
# 在第1行,第1列顯示出來
button.grid(row=1, column=3)
# 顯示窗口
root.mainloop()
def __sign_and_save(self):
'''
生成簽名圖片並保存,最後顯示出來
:return:
'''
# 獲取輸入框內容
name = self.entry.get().strip()
if name == "":
messagebox.showinfo('提示',message="請輸入姓名")
return
# 獲取下拉框內容
style = self.style.get(self.cmb.get())
# 生成簽名
data = {"word": name,
"sizes": 60,
"fonts": style,
"fontcolor": "#000000"}
url = "http://www.uustv.com/"
response = requests.post(url, data=data)
response.encoding = "utf-8"
text = response.text
# 用正則表達式找到簽名圖片
tu = '<div class="tu"><img src="(.*?)"/></div>'
# tu = re.search(tu,text)
# print(tu.group(1))
tu = re.findall(tu, response.text)
# print(tu[0])
# 保存簽名圖片
url = url + tu[0]
response = requests.request("get", url)
file_name = name + ".gif"
with open(file_name, mode="wb")as f:
f.write(response.content)
# 把圖片在界面中顯示出來
self.__show_img(file_name)
def __show_img(self,file_name):
'''
顯示圖片
:param file_name:
:return:
'''
bm = ImageTk.PhotoImage(file=file_name)
label3 = Label(self.root, image=bm)
label3.bm = bm
# 佔用3格
label3.grid(row=2, columnspan=4)
def run(self):
'''
用於外界調用
:return:
'''
self.__window()
if __name__ == '__main__':
NameSign().run()