這篇文章將為大家詳細(xì)講解有關(guān)python實(shí)現(xiàn)簡(jiǎn)易數(shù)碼時(shí)鐘的案例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
從事綿陽(yáng)服務(wù)器托管,服務(wù)器租用,云主機(jī),網(wǎng)站空間,域名申請(qǐng),CDN,網(wǎng)絡(luò)代維等服務(wù)。先插張圖,計(jì)算機(jī)技術(shù)的演進(jìn)過(guò)程,總結(jié)的還是挺到位的。
安裝好Python環(huán)境,引入需要用到的庫(kù):
import threading import turtle import time
引入time庫(kù)后使用localtime()方法可以獲取當(dāng)前服務(wù)器時(shí)間,然后使用turtle庫(kù)繪制7段數(shù)碼管時(shí)鐘。
now = time.localtime() # 返回服務(wù)器時(shí)間 print(now) print(time.strftime("%Y-%m-%d %H:%M:%S", now)) # 轉(zhuǎn)成字符串 # %y 兩位數(shù)的年份表示(00-99) # %Y 四位數(shù)的年份表示(000-9999) # %m 月份(01-12) # %d 月內(nèi)中的一天(0-31) # %H 24小時(shí)制小時(shí)數(shù)(0-23) # %I 12小時(shí)制小時(shí)數(shù)(01-12) # %M 分鐘數(shù)(00=59) # %S 秒(00-59) # %a 本地簡(jiǎn)化星期名稱 # %A 本地完整星期名稱 # %b 本地簡(jiǎn)化的月份名稱 # %B 本地完整的月份名稱 # %c 本地相應(yīng)的日期表示和時(shí)間表示 # %j 年內(nèi)的一天(001-366) # %p 本地A.M.或P.M.的等價(jià)符 # %U 一年中的星期數(shù)(00-53)星期天為星期的開(kāi)始 # %w 星期(0-6),星期天為星期的開(kāi)始 # %W 一年中的星期數(shù)(00-53)星期一為星期的開(kāi)始 # %x 本地相應(yīng)的日期表示 # %X 本地相應(yīng)的時(shí)間表示 # %Z 當(dāng)前時(shí)區(qū)的名稱 # %% %號(hào)本身
繪制數(shù)碼管函數(shù):
# 繪制單根數(shù)碼管 def drawLine(draw): turtle.pensize(3) turtle.pu turtle.fd(3) if draw: turtle.pd() else: turtle.pu() turtle.fd(24) turtle.pu() turtle.fd(3) turtle.right(90) # 根據(jù)數(shù)字繪制數(shù)碼管 def drawNum(num, color): turtle.colormode(255) turtle.color(eval(color)) # 第一條線 if num in [2, 3, 4, 5, 6, 8, 9]: drawLine(True) else: drawLine(False) if num in [0, 1, 3, 4, 5, 6, 7, 8, 9]: drawLine(True) else: drawLine(False) if num in [0, 2, 3, 5, 6, 8, 9]: drawLine(True) else: drawLine(False) if num in [0, 2, 6, 8]: drawLine(True) else: drawLine(False) turtle.left(90) if num in [0, 4, 5, 6, 8, 9]: drawLine(True) else: drawLine(False) if num in [0, 2, 3, 5, 6, 7, 8, 9]: drawLine(True) else: drawLine(False) if num in [0, 1, 2, 3, 4, 7, 8, 9]: drawLine(True) else: drawLine(False) turtle.pu() turtle.left(180) turtle.fd(30) # 繪制后面數(shù)字間隔位置 turtle.update()
一個(gè)7段數(shù)碼管全部繪制(顯示數(shù)字8)順序如下,根據(jù)顯示的數(shù)字來(lái)決定哪些需要繪制,哪些只是抬起畫筆移動(dòng)不進(jìn)行繪制,所以繪制單段數(shù)碼管的函數(shù)內(nèi)設(shè)置了一個(gè)參數(shù)draw。
定義一個(gè)Tick函數(shù),利用threading庫(kù)實(shí)現(xiàn)定時(shí)刷新:
def Tick(): now = time.localtime() now_time.n_sec = now.tm_sec turtle.reset() turtle.hideturtle() turtle.pu() turtle.fd(-300) darwDate(str(now.tm_year), '(255, 69, 0)') turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('年', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(30) turtle.right(90) turtle.fd(30) darwDate(str(now.tm_mon), '(0,139,0)') turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('月', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(30) turtle.right(90) turtle.fd(30) darwDate(str(now.tm_mday), '(0,0,139)') turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('日', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(-90) turtle.right(90) turtle.fd(-510) darwDate(str(now.tm_hour)) turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('時(shí)', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(30) turtle.right(90) turtle.fd(30) darwDate(str(now.tm_min)) turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('分', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(30) turtle.right(90) turtle.fd(30) darwDate(str(now.tm_sec)) turtle.fd(10) turtle.right(90) turtle.fd(30) turtle.write('秒', align="center", font=("Courier", 30, "bold")) turtle.left(180) turtle.fd(30) turtle.right(90) turtle.fd(30) timer = threading.Timer(0.1, Tick) # 利用多線程庫(kù)定時(shí)刷新 timer.start()
最后定義一個(gè)入口函數(shù):
def mian(): turtle.hideturtle() # 隱藏畫筆 turtle.speed(0) # 最快 turtle.tracer(0) turtle.pu() turtle.fd(-300) Tick() turtle.done() # Python turtle模塊的海龜作圖,由于需要展示海龜運(yùn)動(dòng)的過(guò)程,缺省狀態(tài)下,對(duì)作圖進(jìn)行了延遲處理, # 致使復(fù)雜圖形的繪制速度過(guò)慢,可以用如下方法取消延遲,加速繪圖: # 在繪圖之前調(diào)用tracer # turtle.tracer(0) # 在繪圖結(jié)束時(shí)調(diào)用update # turtle.update() mian()
最終效果:
代碼寫好后,可以打包成一個(gè)可執(zhí)行文件,這里需要用到第三方庫(kù)PyInstaller;安裝第三方庫(kù)Python封裝了包管理工具pip(確保安裝時(shí)勾選了pip和Add python.exe to Path)。這里我用在線安裝的方式,在cmd窗口直接運(yùn)行:pip install 包名,如 pip install pyInstaller,注意:這種方式安裝時(shí)會(huì)自動(dòng)下載第三方庫(kù),安裝完成后并不會(huì)刪除,如需刪除請(qǐng)到它的默認(rèn)下載路徑下手動(dòng)刪除。(win7的默認(rèn)路徑://AppData可能是隱藏文件夾 c:\用戶\(你的用戶名)\AppData\Local\pip\cache\ linux的默認(rèn)路徑: ~/.cache/pip)
耐心等待下載并安裝后,就可以使用PyInstaller了,在需要打包的文件目錄下運(yùn)行pyinstaller -F指令:
打包后生成獨(dú)立執(zhí)行文件time.exe:
打包時(shí)還可以通過(guò)–icon指令設(shè)置指定的圖標(biāo),還有更多指令等以后用到的時(shí)候再研究。用了一段時(shí)間的Python,因?yàn)檎Z(yǔ)法簡(jiǎn)潔所以代碼的縮進(jìn)很重要,這也算是一個(gè)小坑吧,不過(guò)熟能生巧,還需多多練習(xí)。
關(guān)于“python實(shí)現(xiàn)簡(jiǎn)易數(shù)碼時(shí)鐘的案例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。