python3多線程實現一個語音報時,定時關機功能的應用

2021-01-08 義縣遊學電子科技公司

我是您的朋友義縣遊學電子科技,今天我跟大家分享一個小應用。利用python實現一個網絡應用,具有定時關機功能和語音報時功能。

下面我先來介紹一下python。python這門語言想必大家都聽說過,就算沒學習過,大家肯定也或多或少地通過網際網路了解過一些。它具有入門簡單,開發效率高,用途廣泛等特點。您一定對於這幾個優點的描述看膩了吧。老實講,對於python而言它的這幾樣優點確實是其他語言所不能比擬的。您要是學習過dart語言,您就跟深有體會了。dart與js類似,語法的使用比js還要糟糕。網絡上有句話叫"反人類的設計",用在dart身上簡直貼切。話說遠了,我們還說python。python的語法類似與c++,但是比c++更靈活一些。如果您學習過c++,那肯定很快就入門python了。

但是入門簡單不代表深入還簡單哦!任何一款程式語言,您學習後用到項目中,就會發現項目中遇到的問題,往往不是程式語言本身而是行業技術的限制或通病。例如您覺得python上手很簡單,但讓你用python去做一個人工智慧應用出來。您肯定犯難!為什麼呢?套用我剛說的那句話:項目中遇到的問題,往往不是程式語言本身而是行業技術的限制或通病。程式語言python我們基本掌握了,但為何還是覺得這個人工智慧的應用很難呢?問題就在於我們對於人工智慧行業和開發思路,思維方式不夠了解。這與用什麼工具無關,你用c++,c#,go,java同樣會面臨這樣的問題。所以我得出的結論就是,您一定要記好哦。

程式語言就是一種工具入門即可,您更應該學習的是專注該領域的思維方式,解決問題的方法或者思路。只有這樣,您在工作中才能得心應手,不至於換個工作環境用另外一種程式語言就蒙圈了不知如何下手了。

言歸正傳吧!今天這個應用利用了百度的報時api,所以需要聯網. 下面這個圖片是界面。

開始之前我們需要做一些準備工作:

1安裝python3.7

2.安裝pyqt包,它提供了python的gui界面,安裝方式是打開cmd窗口輸入pip

install pyqt即可。

3.安裝pycharm開發工具。連結大家自行搜索下載

pycharm開發工具

開發環境準備好以後,我先介紹一下思路。首先我們用pyqt做一個界面,界面的模樣就是上邊運行界面的樣子了。下面是我的主函數:其中MainWindow1是pyqt生成的界面類,實例化給w.然後定義了一個1000ms的一個定時器,用於1s顯示一次時間(通過w.showtime方法完成的顯示)及報時和關機時間的判斷。關機時間也是1秒判斷一次的。其中多線程主要體現在語音報時功能上和關機時間的倒計時。因為語音報時是單獨一個個體因此放入一個單獨的進程中,這樣在1秒計時的時候不會互相影響,否則會出現語音報時中斷的現象。

if __name__ == "__main__":a = QApplication(sys.argv) w = MainWindow1() path='d:/語音'#設置語音保存的路徑.每次運行都會刪除該目錄後重新建立.保證目錄下文件的大小 if os.path.exists(path):#判斷給定的目錄是否存在 shutil.rmtree('d:/語音/')#無需權限的刪除目錄 os.mkdir('d:/語音/')#創建目錄 # timer對象的信號timeout 連接到w對象的lcdtime函數(槽) timer.timeout.connect(w.showtime)#信號槽連接 timer.timeout.connect(w.shutdown) w.timeEdit.editingFinished.connect(w.shutdown_ready) timer.start(1000) w.show() # 可以生成窗口 th = threading.Thread(None, w.speak, '線程1', ('歡迎使用語音報時程序,作者:金元慶',), None) # ('歡迎使用語音報時程序,作者:金元慶',)是w.speak的元祖參數.speak()只有一個參數,所以加逗號 th.start() sys.exit(a.exec_())

下邊是showtime方法的內容,是pyqt的一個lcdNumber控制項的顯示功能:

def showtime(self):self.lcdNumber.display(time.strftime('%H:%M:%S')) # time.strftime('%H:%M:%S')顯示時間(時間顯示格式)

然後是shutdown()方法內容。這是重點,首先把self.speak方法放入線程1中,方法中主要是實現調用百度語音合成api.當設置好關機時間後按下回車確認,這時開始倒計時,倒計時時間到,會調用window的一個關機命令行命令:

os.system("shutdown -s") # L註銷,R重啟,s關機

python通過os.syetem(「命令」)來實現調用Windows的命令行命令。

下邊代碼中的keyPressEvent方法實現了python按鍵的檢測功能,代碼中是檢測是否按下了回車鍵和esc鍵。

我把部分原始碼貼出來分享給大家,因為源碼太長了,根本沒法貼出來。如果有喜愛的朋友可以關注我後私信哦。我把源碼發給您。

def shutdown(self):#將語音報時單獨放進一個線程,效果和槽調用沒啥區別 #th = threading.Thread(None, self.showtime, '線程7', ( ), None) # ()為showtime的參數,為空 #th.start() '''使用datetime顯示當前時間 import datetime print(datetime.datetime.now().strftime('%Y,%m,%d,%H,%M,%S') ) ''' #15分鐘報時 import time #print(time.localtime())#time.struct_time(tm_year=2016, tm_mon=12, tm_mday=1, tm_hour=20, tm_min=31, tm_sec=41, tm_wday=3, tm_yday=336, tm_isdst=0) if (time.localtime().tm_min%15==0)&(time.localtime().tm_sec==0): #print('每隔15分報時') strtime='當前時間是'+str(+time.localtime().tm_hour)+'時'+str(time.localtime().tm_min)+'分'+str(time.localtime().tm_sec)+'秒'+str(time.localtime().tm_year)+'年'+str(time.localtime().tm_mon)+'月'+str(time.localtime().tm_mday)+'日'+'星期'+str(time.localtime().tm_wday+1)+','+'開發者金元慶' #print(strtime) th = threading.Thread(None, self.speak, '線程1', (strtime,),None) # (1,2)為time1的參數 th.start() import time #print('當前時間',time.localtime()) #print('將給定的秒數轉化成距離1970年的時間',time.localtime(40)) #print('當前時間距離1970年的秒數',time.mktime(time.localtime())) #print('當前時間距離1970年的秒數轉成時間',time.localtime(time.mktime(time.localtime()))) if (self.bb==1): shut_time=QTime() self.timeEdit_2.setTime(shut_time.fromMSecsSinceStartOfDay(abs(self.timeEdit.time().msecsTo(QTime.currentTime()))))#msecsTo(當前時間)-->返回timedit控制項的顯示時間到當前時間的毫秒,fromMSecsSinceStartOfDay(毫秒)--->生成一個新的時間對象,並將毫秒轉成時間 if (time.strftime('%H:%M:%S') == self.timeEdit.text()): th = threading.Thread(None, self.speak, '線程2', ("用戶您好!您已經觸發關機事件,20秒後即將關機.按下esc鍵可取消關機",), None) # (1,2)為time1的參數 th.start() #print("親愛的用戶,你好,你已經觸發了關機事件!約10秒後關機") self.cc=2 self.bb=2 #print('當前時間', time.strftime('%H:%M:%S')) # 顯示時間 # range(0,10) 0123..9 #for ii in range(10, 0, -1): elif (self.cc==2 )& (self.dd<3)&(abs(QTime.currentTime().msecsTo( self.timeEdit.time()))>20000): self.dd = self.dd + 1 print("倒計時:",self.dd, "秒") th = threading.Thread(None, self.speak, '線程3', ("倒計時"+str(self.dd)+"秒",), None) # (1,2)為time1的參數 th.start() th.join(1.5) elif self.dd==3: self.dd=0 self.cc=0 #timer.timeout.disconnect(self.shutdown) th = threading.Thread(None, self.speak, '線程4', ("關機",), None) # (1,2)為time1的參數 th.start() print("關機") #sys.exit() # 退出程序,下邊的語句不執行 #os.system("shutdown -s") # L註銷,R重啟,s關機 #def paintEvent(self, QPaintEvent): # print('設置時間', self.timeEdit.text()) # 讀取timeedit的設置的時間 #print('當前時間', time.strftime('%H:%M:%S')) # 顯示時間def keyPressEvent(self, KeyEvent): if KeyEvent.key() == Qt.Key_Escape: # key_escape是qt的esc按鍵常量 參考http://doc.qt.io/qt-5/qt.html#Key-enum th = threading.Thread(None, self.speak, '線程5', ("您取消了關機",), None) # (1,2)為time1的參數 th.start() #print('esc鍵,您取消了關機!') self.dd = 0#停止關機動作 self.cc = 0#cc停止倒計時數秒 #sys.exit() # 退出程序,下邊的語句不執行 if KeyEvent.key() == Qt.Key_Enter: self.bb=1 th = threading.Thread(None, self.speak, '線程6', ("您設置了自動關機時間",), None) # (1,2)為time1的參數 th.start()

相關焦點

  • 教你寫一個定時關機程序
    2、定時到x點x分提醒你是否要關機,如果你沒確認不關機,則在60s後將自動關機。3、立即關機。4、取消自動關機。5、註銷計算機。6、打開計算器。7、打開畫圖軟體。8、打開記事本。在介紹各個功能之前,首先介紹一個函數: system函數。
  • win10作業系統如何用命令實現關機功能
    我們在使用電腦的過程中,有時候會用到比較特殊的功能。比如定時關機功能、系統計劃任務等操作。我們如何實現命令自動關機功能呢?今天鶯歌就以實際案例講解,我們要學以致用。圖1-2命令解釋:shutdown是關閉的意思,在計算機用語中是關機。-s是配合shutdown命令使用,-t表示的是關機時間的設定,單位是以秒來計算的。
  • win10怎麼定時關機?
    隨著Win10正式版即將到來,今後很多用戶都將用上最新的Win10系統,那麼win10怎麼定時關機?下面教大家3種Win10定製關機 方法,重點推薦大家使用Win10定時關機命令。Win10怎麼定時關機?不管是XP、Win7/8大家最常用的還是通過定時關機命令實現關機。而最新的Win10系統,同樣支持Windows命令進行關機,因此這種方法值得大家優先使用。
  • Windows 電腦定時關機,定時打開軟體,定時做任何事的方法!
    Windows 中有一個非常棒的功能,叫做「任務計劃程序」,但是因為它的界面看起來有點複雜,導致很少有人使用它。其實對於任何人而言,「任務計劃程序」都是非常棒的工具,它可以讓 Windows 在指定情況下自動執行幾乎所有操作。
  • 馬思唯整點報時是什麼梗 馬思唯的報時電臺語音在哪聽
    最近很多人的朋友圈都被一個熟悉的說唱歌手的名字刷屏了,不過這次馬思唯頻繁被大家提到,並不是因為他的說唱作品,而是他的整點報時語音。「穿過挪威的森林,讓我走進你的夢裡」,「我是馬思唯,現在是凌晨十二點」等等類似的語音最近很火,有網友根據馬思唯整點報時的語音,又延伸出了很多的段子。
  • Win7怎麼讓電腦定時關機 Win7怎麼取消自動關機
    Win7怎麼讓電腦定時關機?想必大家一定有遇到過這樣的煩惱吧,電腦文件下載到一半或傳輸到一半的時候,而你有事需外出,關機吧太可惜了,不關機吧又浪費電,還會影響電腦的使用壽命,那麼該如何是好呢?這時候選擇電腦定時關機是最好的解決辦法。那麼,Win7電腦定時關機怎麼設置呢?詳看下文。
  • 實現多線程的標準操作,基於Runnable接口實現java多線程
    1 為什麼要用Runnable上一篇文章介紹了通過繼承Thread類,實現java多線程。但如果當我們創建的這個線程類還想繼承其他類的時候,這種方法就略顯局限了。這也是java單繼承的局限性。為了避免這種局限性,所以又提供了第二種多線程主體定義的形式:實現Runnable接口。
  • 電腦知識1-7 電腦定時關機方法
    在窗口中輸入 shutdown  -s -t 0 按確定即可實現 立刻 關機。-t xx   設置關閉的時間為 xx 秒後(xx範圍是 0-315360000 ),最大值315360000 秒如果設置了定時關機想取消的話可以用以下命令來取消:有常用幾種命令如下:shutdown -s -t 0      實現立刻關機shutdown -s -t 300
  • Ubuntu中語音報時的方法
    MacOS中可以語音報時,感覺很酷。可以設置每小時、每半小時或者每15分鐘報時間。Ubuntu中能不能實現呢?找了好久,一直找不到方法。今天終於找到了。方法就是crontab + espeak具體實現如下:在終端中輸入:crontab -e在彈出的編輯器裡加入如下代碼:0,15,30,45 * * * * espeak "time now is `date
  • Win10 使用進階:如何語音控制 PC 版小娜關機 / 重啟?
    Win10數字助手Cortana越來越智能,但她還不能做到語音控制關機和重啟等基本功能。雖然第三方應用Cortanium可以實現小娜語音關機等功能,但這還是需要第三方應用支持才能實現。實際上,只要按照IT之家介紹的方法稍加「引導」,小娜就能幫我們完成關機、重啟、註銷和休眠等操作。
  • Java實現終止線程池中正在運行的定時任務
    最近項目中遇到了一個新的需求,就是實現一個可以動態添加定時任務的功能。說到這裡,有人可能會說簡單啊,使用quartz就好了,簡單粗暴。然而quartz框架太重了,小項目根本不好操作啊。當然,也有人會說,jdk提供了timer的接口啊,完全夠用啊。
  • 電腦怎麼設置定時關機?
    1、先新建一個文本文檔文件,然後寫入命令:shutdown -s -t 3600這裡的-s 代表關機、-t代表時間,時間數字可以自己設定、單位是秒,比如上面是3600,意思是3600秒後,也就是1個小時後關機。
  • 定時任務實現原理詳解
    從單機角度,定時任務實現主要有以下 3 種方案:二、while+sleep組合while+sleep 方案,簡單的說,就是定義一個線程,然後 while 循環,通過 sleep 延遲時間來達到周期性調度任務。
  • 電腦怎麼設置定時關機?簡單3步教你搞定!
    這時,自動關機無疑是一個非常人性化的功能,我們的手機會有定時關停的功能,那麼電腦該如何設置自動關機呢?2.在對話框中輸入shutdown -s -tXXxx指的就是你想要電腦在多少秒後關機,比如上圖,我輸入的是shutdown -s -t 7200,就表示電腦會在2小時之後關機。
  • 如何設定iPhone 每小時提醒或整點報時?這1招就能實現
    經常碰觸手機屏幕、滑鼠、鍵盤或3C產品都可能會造成細菌附著,除了要養成定時起身活動、喝水外,也要勤洗手和清潔才能防止細菌附著,那如何實現iPhone每小時提醒或整點報時呢?這些技巧你一定要學會。手機屏幕比起廁所馬桶細菌高出3.5倍,且很多人都習慣不定時擦拭手機,過去就有英國手機保險公司Insurance2go針對智慧型手機研究發現,手機螢幕是最髒的部分,汙垢累積嚴重會引起皮膚病,多數人好幾個月才會清潔手機螢幕一次,導致螢幕附著的細菌量比起馬桶還要多,建議要養成不定時「清潔iPhone手機」。
  • 科龍空調定時功能怎麼設置?
    最近接到很多顧客對於科龍空調定時功能怎麼設置的諮詢。下面我們就來為大家解疑:1、看你需要設置定時開機還是定時關機,如果需要設置定時關機的話,打開空調,然後等空調啟動。2、對著空調按下「定時」按鈕,這樣就會進入定時設置,遙控器顯示屏會有數字在閃爍,這個時候只需要按溫度「+」和「—」按鈕來調節定時的時間,「+」可以增加定時時間,「—」能減少定時時間。3、將定時時間選擇好之後,再按一次「定時」按鈕,這樣就完成定時關機了。
  • Java實現多線程的方式,啊四種
    小夥伴們都知道Java實現多線程有兩種方式:1、繼承Thread類,重寫run()方法;2、實現Runnable接口,實現run()方法實際上還有兩種方式:>3、實現Callable接口,實現call()方法;4、通過線程池創建線程接下來一個一個說明:1、繼承Thread類,重寫run()方法線程類:測試類:
  • Asp定時執行操作、Asp定時讀取資料庫(網頁定時操作詳解)
    但是完成的功能取有區別。  setTimeout方法是定時程序,也就是在什麼時間以後幹什麼。幹完了就拉倒。  setInterval方法則是表示間隔一定時間反覆執行某操作。  如果用setTimeout實現setInerval的功能,就需要在執行的程序中再定時調用自己才行。
  • JAVA面試題:你在項目中使用多線程的場景?
    背景在JAVA面試時,很多面試官都會問多線程在項目中的實際應用場景,這個時候我們通常不知道如何回答。因為我們大多數程式設計師通常都是和業務代碼打交道,需要用到多線程的地方我們容器和框架一般都替我們處理好了,所以我們很少有機會接觸到多線程編程。
  • iPhoneX卡頓沒法關機怎麼辦?三分鐘教你強制關機
    iPhoneX卡了沒發關機怎麼辦?蘋果X死機了怎麼強制關機重啟?有時打開的應用過多,會導致iPhoneX死機,卡住,下面小編就為大家帶來蘋果iPhoneX強制關機的方法教程,一起來看看吧。iPhoneX卡了沒發關機怎麼辦?