使用python編寫簡單的小程式編譯成exe跑在win10上,pythonwin10
每天的工作其實很無聊,早知道應該去IT公司闖蕩的。最近的工作內容是每逢一個整點,從早7點到晚11點,去查一次客流資料,整理到表格中,上交給素未蒙面的上線,由他呈交領導查閱。
人的精力畢竟是有限的,所以不一定在每個整點都可以及時去做這項工作。靈機一動,這種一絲不苟的活兒應該讓計算機來做,由它來在每個整點來告訴我該去工作了。
說幹就幹,平時只用c#寫過小程式,由於辦公電腦上是公用的,所以沒有想自己電腦一樣裝有visual studio,索性心一橫,用python試試吧。總是聽說那句大名鼎鼎的“人生苦短,我用python”。這一次就當是我的入門吧。
我的需求其實很簡單,讓程式擷取當前的時間,然後使用間隔為1秒的timer去重複重新整理時間,當時間滾動到整點的時候,且該整點在我們預期區間[7-23]點內,我就讓電腦發出蜂鳴聲來提示該去查客流了。
通過簡單的查閱,我決定使用tkinter來做UI,我對UI的要求不高,本身的設計也很糟糕,所以只是要在視窗上放一個Lable,讓這個Lable的text按秒來顯示當前的時間。
第一步,使用tkinter繪製表單,在該表單上增加一個Lable,就是下面這樣:
接下來,第二步,使用一個timer來計時,interval 設定為1000ms,在start()時間中實現,擷取目前時間值,重新賦到Lable的text屬性上,這樣就實現了類似時鐘的滾動效果。如下:
前兩步都順利實現了,代碼方面就剩下一步了。最後一步要做的就是,在start()事件時候,判斷擷取的目前時間是否是整點,如果是預期的整點,就讓電腦蜂鳴一陣,以提醒我該去工作了。這裡面主要就一個新功能,怎樣使得計算機蜂鳴。
附代碼如下(python 2.7):
# -*- coding: utf-8 -*-from tkinter import * # 匯入 Tkinter 庫import time,datetime,winsound,threadingroot = 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表示發生時間長度,1000為1秒 lbl.pack() # 將小組件放置到主視窗中 timer.start()if __name__ == "__main__": timer = threading.Timer(1.0,tick,"") timer.start()root.mainloop()
前面這些都不是我今天記錄的重點。這篇文章的記錄重點在嘗試將py代碼編譯成exe檔案。
安裝pyinstaller
到指定目錄下使用pyinstaller來講py檔案編譯成exe
首先完成第一步,在安裝python後,完成環境變數的配置,這點我在這裡不贅述,請在部落格園上查。這裡簡單介紹下在cmd上安裝pyinstaller。為啥用它呢?請百度,我現在也一知半解。安裝命令:pip install pyinstaller,具體安裝過程如下:
接下來我們來做第二步。我今天在這一步上走了很多彎路,最終在查閱眾多資料後,得到了一個勉強可用的折中方法。如果大家有更好的方法,請不吝指教。
我們把寫好的py檔案,拷貝到如下路徑:
使用如下命令進行編譯成exe檔案:
pyinstaller -F -w yourfilename.py
成功編譯產生exe檔案,產生的檔案結構
至此,我完成了今天的工作。使用簡單的python編寫一個定時提醒程式。
這裡我記錄兩個疑問:
第一,感覺py檔案經pyinstaller編譯出來的exe檔案偏大,足有8兆多,這是為什嗎?
第二,如果不在指定目錄下編譯成exe,就不會成功,這是為什嗎?附帶失敗:
最後,在這裡留下一點未來可以擴充的地方,下次嘗試使用tts技術,實現整點報時提醒,畢竟現在的蜂鳴嘟嘟聲,實在是有點傻。