Python+Tkinter打造簽名設(shè)計(jì)工具
1.概述
前面我們已經(jīng)詳細(xì)的介紹了,怎么使用Tkinter創(chuàng)建屬于自己的窗口界面了。整體布局呢我們已經(jīng)搭建起來(lái),唯一沒(méi)有實(shí)現(xiàn)的一個(gè)步驟就是,用戶每輸入一個(gè)名字,就會(huì)將個(gè)性簽名一并顯示在這個(gè)窗口界面中,今天我就帶著大家一起完成這個(gè)需求。
今天的文章可以看成是爬蟲(chóng)+Tkinter窗口的結(jié)合。昨天我們完成了Tkinter窗口搭建過(guò)程,今天需要做的就是利用爬蟲(chóng)得到我們最終想要的個(gè)性化簽名。網(wǎng)上在線簽名網(wǎng)站特別多,我也是任意選取了百度首頁(yè)排在第一位的那個(gè)在線簽名網(wǎng)站。
2.網(wǎng)頁(yè)分析
1)網(wǎng)頁(yè)缺陷
這個(gè)文章有一個(gè)不好的地方,就是你輸入一些空格,網(wǎng)站就給你顯示一個(gè)空白(如圖所示)。
我們?cè)趯?xiě)代碼的時(shí)候,可不能這樣,要避免這個(gè)問(wèn)題的發(fā)生。我的想法是這樣的,如果你輸入為空,我就彈窗提醒你。
2)頁(yè)面分析
從圖中可以發(fā)現(xiàn),我們?cè)谳斎肟蛎枯斎胍粋€(gè)名字,進(jìn)行查詢后。相當(dāng)于給服務(wù)器發(fā)送了一次post請(qǐng)求
,post請(qǐng)求的表單共有四個(gè),從圖中可以很清晰地看出來(lái)??偟膩?lái)說(shuō),這個(gè)網(wǎng)站還是挺簡(jiǎn)單的,會(huì)一些簡(jiǎn)單的爬蟲(chóng)都可以完成,我這里就不詳細(xì)介紹了。
3)數(shù)據(jù)的獲取
怎么查看網(wǎng)頁(yè)源代碼,相信大家不用我說(shuō)了吧。我們想要獲取的數(shù)據(jù),一般的網(wǎng)址是會(huì)直接顯示在源代碼中,比如說(shuō)今天這個(gè)網(wǎng)站,但是對(duì)于大多數(shù)網(wǎng)站就不一定了。通過(guò)定位我們發(fā)現(xiàn),最終想要的個(gè)性簽名圖片,位于class="tu"
的div標(biāo)簽
中,我已經(jīng)用紅色方框標(biāo)注出來(lái)了,由于我們只是獲取這一條信息,直接使用正則表達(dá)式來(lái)獲取好了。
3.完整代碼
通過(guò)上述說(shuō)明,我們已經(jīng)將準(zhǔn)備工作做好了,現(xiàn)在可以書(shū)寫(xiě)代碼了。這里有幾個(gè)知識(shí)點(diǎn)昨天還沒(méi)有講述到,就簡(jiǎn)單提一下。
entry.get()
獲取用戶輸入。我們?cè)谳斎肟蜉斎胧裁矗@里可以捕捉到;
messagebox.showinfo()
能夠完成彈窗提示,和VBA有點(diǎn)像;
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="請(qǐng)輸入完整的名字") else: # 請(qǐng)求網(wǎng)站,獲取圖片 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 # 寫(xiě)入到本地 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) # 創(chuàng)建窗口:實(shí)例化一個(gè)窗口對(duì)象。 root = Tk() # 窗口大小 root.geometry("540x305+374+182") # 窗口標(biāo)題 root.title("我的個(gè)性簽名設(shè)計(jì)") # 添加標(biāo)簽控件 label = Label(root,text="簽名:",font=("宋體",25),fg="red") # 定位 label.grid() # 添加輸入框 entry = Entry(root,font=("宋體",25),fg="black") entry.grid(row=0,column=1) # 添加點(diǎn)擊按鈕 button = Button(root,text="簽名設(shè)計(jì)",font=("宋體",25),fg="blue",command=func) button.grid(row=1,column=1) # 顯示窗口 root.mainloop()
效果如下:
4.總結(jié)
為了更好的在不懂行的面前裝逼,我最終也將程序使用pyinstaller打包了。這樣你就可以發(fā)給那些文科妹子裝裝逼,不是很好嗎?也會(huì)一并提供給大家。
本文有兩個(gè)遺留問(wèn)題,可以交給大家解決一下。其一,原網(wǎng)站可以進(jìn)行簽名設(shè)計(jì)的字體切換,我這個(gè)在代碼中沒(méi)有體現(xiàn)出來(lái),你可以自行研究一下。其二,使用pyinstaller打包后的程序,雖然可以運(yùn)行,但是好慢呀,大家自行下去思考。
以上就是Python+Tkinter打造簽名設(shè)計(jì)工具的詳細(xì)內(nèi)容,更多關(guān)于Python Tkinter簽名設(shè)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Numpy中如何創(chuàng)建矩陣并等間隔抽取數(shù)據(jù)
這篇文章主要介紹了Numpy中如何創(chuàng)建矩陣并等間隔抽取數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Python下的subprocess模塊的入門(mén)指引
這篇文章主要介紹了Python下的subprocess模塊的入門(mén)指引,subprocess模塊被用于Python的多線程編程,需要的朋友可以參考下2015-04-04python熱力圖實(shí)現(xiàn)簡(jiǎn)單方法
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python熱力圖實(shí)現(xiàn)簡(jiǎn)單方法,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。2021-01-01Python語(yǔ)言描述連續(xù)子數(shù)組的最大和
這篇文章主要介紹了Python語(yǔ)言描述連續(xù)子數(shù)組的最大和,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn)
本文主要介紹了Python腳本修改Maya ASCII文件路徑方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python中matplotlib條件背景顏色的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于python中matplotlib條件背景顏色的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Python常用內(nèi)建模塊hashlib、hmac詳解
這篇文章主要介紹了Python常用內(nèi)建模塊hashlib、hmac詳解,摘要算法又稱哈希算法、散列算法,它通過(guò)一個(gè)函數(shù),把任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為一個(gè)長(zhǎng)度固定的數(shù)據(jù)串,需要的朋友可以參考下2023-08-08Python面向?qū)ο缶幊袒A(chǔ)實(shí)例分析
這篇文章主要介紹了Python面向?qū)ο缶幊袒A(chǔ),結(jié)合實(shí)例形式分析了Python面向?qū)ο缶幊填惖亩x、繼承、特殊方法及模塊相關(guān)原理與操作技巧,需要的朋友可以參考下2020-01-01