python實現(xiàn)簡易數(shù)碼時鐘
最近迷上了Python,要說為什么呢?Python語法簡單,功能強大,有廣泛的第三方庫能快速編程實現(xiàn)自己的想法(無需重復(fù)去造輪子)。就像某位前輩說的:“人生苦短,學(xué)會偷懶…”,配置好sublime text照著網(wǎng)上教程直接上手寫個小程序入門。
先插張圖,計算機技術(shù)的演進(jìn)過程,總結(jié)的還是挺到位的。

安裝好Python環(huán)境,引入需要用到的庫:
import threading import turtle import time
引入time庫后使用localtime()方法可以獲取當(dāng)前服務(wù)器時間,然后使用turtle庫繪制7段數(shù)碼管時鐘。
now = time.localtime() # 返回服務(wù)器時間
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ù)(0-23)
# %I 12小時制小時數(shù)(01-12)
# %M 分鐘數(shù)(00=59)
# %S 秒(00-59)
# %a 本地簡化星期名稱
# %A 本地完整星期名稱
# %b 本地簡化的月份名稱
# %B 本地完整的月份名稱
# %c 本地相應(yīng)的日期表示和時間表示
# %j 年內(nèi)的一天(001-366)
# %p 本地A.M.或P.M.的等價符
# %U 一年中的星期數(shù)(00-53)星期天為星期的開始
# %w 星期(0-6),星期天為星期的開始
# %W 一年中的星期數(shù)(00-53)星期一為星期的開始
# %x 本地相應(yīng)的日期表示
# %X 本地相應(yīng)的時間表示
# %Z 當(dāng)前時區(qū)的名稱
# %% %號本身

繪制數(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()
一個7段數(shù)碼管全部繪制(顯示數(shù)字8)順序如下,根據(jù)顯示的數(shù)字來決定哪些需要繪制,哪些只是抬起畫筆移動不進(jìn)行繪制,所以繪制單段數(shù)碼管的函數(shù)內(nèi)設(shè)置了一個參數(shù)draw。

定義一個Tick函數(shù),利用threading庫實現(xiàn)定時刷新:
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('時', 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) # 利用多線程庫定時刷新
timer.start()
最后定義一個入口函數(shù):
def mian(): turtle.hideturtle() # 隱藏畫筆 turtle.speed(0) # 最快 turtle.tracer(0) turtle.pu() turtle.fd(-300) Tick() turtle.done() # Python turtle模塊的海龜作圖,由于需要展示海龜運動的過程,缺省狀態(tài)下,對作圖進(jìn)行了延遲處理, # 致使復(fù)雜圖形的繪制速度過慢,可以用如下方法取消延遲,加速繪圖: # 在繪圖之前調(diào)用tracer # turtle.tracer(0) # 在繪圖結(jié)束時調(diào)用update # turtle.update() mian()
最終效果:

代碼寫好后,可以打包成一個可執(zhí)行文件,這里需要用到第三方庫PyInstaller;安裝第三方庫Python封裝了包管理工具pip(確保安裝時勾選了pip和Add python.exe to Path)。這里我用在線安裝的方式,在cmd窗口直接運行:pip install 包名,如 pip install pyInstaller,注意:這種方式安裝時會自動下載第三方庫,安裝完成后并不會刪除,如需刪除請到它的默認(rèn)下載路徑下手動刪除。(win7的默認(rèn)路徑://AppData可能是隱藏文件夾 c:\用戶\(你的用戶名)\AppData\Local\pip\cache\ linux的默認(rèn)路徑: ~/.cache/pip)
耐心等待下載并安裝后,就可以使用PyInstaller了,在需要打包的文件目錄下運行pyinstaller -F指令:

打包后生成獨立執(zhí)行文件time.exe:

打包時還可以通過–icon指令設(shè)置指定的圖標(biāo),還有更多指令等以后用到的時候再研究。用了一段時間的Python,因為語法簡潔所以代碼的縮進(jìn)很重要,這也算是一個小坑吧,不過熟能生巧,還需多多練習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pytorch中torch.stack()函數(shù)用法解讀
這篇文章主要介紹了pytorch中torch.stack()函數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Python 計算機視覺編程進(jìn)階之OpenCV 進(jìn)行霍夫變換
霍夫變換(Hough)是一個非常重要的檢測間斷點邊界形狀的方法。它通過將圖像坐標(biāo)空間變換到參數(shù)空間,來實現(xiàn)直線與曲線的擬合,通過本篇文章我們來詳細(xì)了解它2021-11-11
python輸入整條數(shù)據(jù)分割存入數(shù)組的方法
今天小編就為大家分享一篇python輸入整條數(shù)據(jù)分割存入數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python 實現(xiàn)得到當(dāng)前時間偏移day天后的日期方法
今天小編就為大家分享一篇python 實現(xiàn)得到當(dāng)前時間偏移day天后的日期方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12

