使用python編寫簡單的小程序編譯成exe跑在win10上
每天的工作其實(shí)很無聊,早知道應(yīng)該去IT公司闖蕩的。最近的工作內(nèi)容是每逢一個(gè)整點(diǎn),從早7點(diǎn)到晚11點(diǎn),去查一次客流數(shù)據(jù),整理到表格中,上交給素未蒙面的上線,由他呈交領(lǐng)導(dǎo)查閱。
人的精力畢竟是有限的,所以不一定在每個(gè)整點(diǎn)都可以及時(shí)去做這項(xiàng)工作。靈機(jī)一動,這種一絲不茍的活兒應(yīng)該讓計(jì)算器來做,由它來在每個(gè)整點(diǎn)來告訴我該去工作了。
說干就干,平時(shí)只用c#寫過小程序,由于辦公電腦上是公用的,所以沒有想自己電腦一樣裝有visual studio,索性心一橫,用python試試吧。總是聽說那句大名鼎鼎的“人生苦短,我用python”。這一次就當(dāng)是我的入門吧。
我的需求其實(shí)很簡單,讓程序獲取當(dāng)前的時(shí)間,然后使用間隔為1秒的timer去重復(fù)刷新時(shí)間,當(dāng)時(shí)間滾動到整點(diǎn)的時(shí)候,且該整點(diǎn)在我們預(yù)期區(qū)間[7-23]點(diǎn)內(nèi),我就讓計(jì)算機(jī)發(fā)出蜂鳴聲來提示該去查客流了。
通過簡單的查閱,我決定使用tkinter來做UI,我對UI的要求不高,本身的設(shè)計(jì)也很糟糕,所以只是要在窗口上放一個(gè)Lable,讓這個(gè)Lable的text按秒來顯示當(dāng)前的時(shí)間。
第一步,使用tkinter繪制窗體,在該窗體上增加一個(gè)Lable,效果圖就是下面這樣:
接下來,第二步,使用一個(gè)timer來計(jì)時(shí),interval 設(shè)置為1000ms,在start()時(shí)間中實(shí)現(xiàn),獲取當(dāng)前時(shí)間值,重新賦到Lable的text屬性上,這樣就實(shí)現(xiàn)了類似時(shí)鐘的滾動效果。效果圖如下:
前兩步都順利實(shí)現(xiàn)了,代碼方面就剩下一步了。最后一步要做的就是,在start()事件時(shí)候,判斷獲取的當(dāng)前時(shí)間是否是整點(diǎn),如果是預(yù)期的整點(diǎn),就讓電腦蜂鳴一陣,以提醒我該去工作了。這里面主要就一個(gè)新功能,怎樣使得計(jì)算器蜂鳴。
附代碼如下(python 2.7):
# -*- coding: utf-8 -*- from tkinter import * # 導(dǎo)入 Tkinter 庫 import time,datetime,winsound,threading root = Tk() lbl = Label(root,text ="hello,world",width = 30,height = 2) def tick(): global timer timer = threading.Timer(1.0,tick,"") currenttime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) lbl.config(text = currenttime) currenttime1 = datetime.datetime.now() if currenttime1.minute == 0 and currenttime1.second == 0 and currenttime1.hour > 5 and currenttime1.hour < 23: winsound.Beep(1000,5000) #其中600表示聲音大小,1000表示發(fā)生時(shí)長,1000為1秒 lbl.pack() # 將小部件放置到主窗口中 timer.start() if __name__ == "__main__": timer = threading.Timer(1.0,tick,"") timer.start() root.mainloop()
前面這些都不是我今天記錄的重點(diǎn)。這篇文章的記錄重點(diǎn)在嘗試將py代碼編譯成exe文件。
安裝pyinstaller
到指定目錄下使用pyinstaller來講py文件編譯成exe
首先完成第一步,在安裝python后,完成環(huán)境變量的配置,這點(diǎn)我在這里不贅述,請?jiān)诓┛蛨@上查。這里簡單介紹下在cmd上安裝pyinstaller。為啥用它呢?請百度,我現(xiàn)在也一知半解。安裝命令:pip install pyinstaller,具體安裝過程如下截圖:
接下來我們來做第二步。我今天在這一步上走了很多彎路,最終在查閱眾多資料后,得到了一個(gè)勉強(qiáng)可用的折中方法。如果大家有更好的方法,請不吝指教。
我們把寫好的py文件,拷貝到如下路徑:
使用如下命令進(jìn)行編譯成exe文件:
pyinstaller -F -w yourfilename.py
成功編譯生成exe文件,生成的文件結(jié)構(gòu)如圖:
至此,我完成了今天的工作。使用簡單的python編寫一個(gè)定時(shí)提醒程序。
這里我記錄兩個(gè)疑問:
第一,感覺py文件經(jīng)pyinstaller編譯出來的exe文件偏大,足有8兆多,這是為什么?
第二,如果不在指定目錄下編譯成exe,就不會成功,這是為什么?附帶失敗截圖:
最后,在這里留下一點(diǎn)未來可以擴(kuò)展的地方,下次嘗試使用tts技術(shù),實(shí)現(xiàn)整點(diǎn)報(bào)時(shí)提醒,畢竟現(xiàn)在的蜂鳴嘟嘟聲,實(shí)在是有點(diǎn)傻。
相關(guān)文章
pandas.DataFrame.from_dict直接從字典構(gòu)建DataFrame的方法
本文主要介紹了pandas.DataFrame.from_dict直接從字典構(gòu)建DataFrame的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06python實(shí)現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)單線程多任務(wù)非阻塞TCP服務(wù)端的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06淺談Python數(shù)學(xué)建模之固定費(fèi)用問題
本文主要介紹了Python固定費(fèi)用問題的建模與求解。學(xué)習(xí) PuLP工具包中處理復(fù)雜問題的快捷使用方式2021-06-06利用OpenCV中對圖像數(shù)據(jù)進(jìn)行64F和8U轉(zhuǎn)換的方式
這篇文章主要介紹了利用OpenCV中對圖像數(shù)據(jù)進(jìn)行64F和8U轉(zhuǎn)換的方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python?flask框架post接口調(diào)用示例
這篇文章主要介紹了Python?flask框架post接口調(diào)用,結(jié)合實(shí)例形式分析了基于flask框架的post、get請求響應(yīng)及接口調(diào)用相關(guān)操作技巧,需要的朋友可以參考下2019-07-07