Python+Tkinter創(chuàng)建一個(gè)簡單的鬧鐘程序
本文主要是使用 Python 的 Tkinter 庫創(chuàng)建一個(gè)簡單的鬧鐘程序,它可以在指定的時(shí)間播放一個(gè)聲音來提醒你。這個(gè)程序界面比較簡單,只有一個(gè)標(biāo)簽、三個(gè)選項(xiàng)菜單和一個(gè)按鈕,用戶可以通過選項(xiàng)菜單設(shè)置鬧鐘的時(shí)間,然后點(diǎn)擊按鈕開始計(jì)時(shí),直到鬧鐘時(shí)間到達(dá)時(shí),程序會播放一個(gè)聲音以提示用戶。
現(xiàn)在讓我們逐個(gè)解釋每個(gè)代碼塊的作用。
from tkinter import * import datetime import time import winsound from threading import *
首先,我們導(dǎo)入了 tkinter 庫、datetime、time 庫、winsound 庫以及 threading 庫。
root = Tk() root.geometry("400x200")
創(chuàng)建一個(gè)名為 root 的窗口,并設(shè)置窗口大小為 400x200。
def Threading(): t1=Thread(target=alarm) t1.start()
定義一個(gè)函數(shù) Threading(),它將創(chuàng)建一個(gè)名為 t1 的新線程,該線程的目標(biāo)是運(yùn)行 alarm() 函數(shù),并啟動該線程。
def alarm(): while True: set_alarm_time = f"{hour.get()}:{minute.get()}:{second.get()}" time.sleep(1) current_time = datetime.datetime.now().strftime("%H:%M:%S") print(current_time,set_alarm_time) if current_time == set_alarm_time: print("Time to Wake up") winsound.PlaySound("sound.wav",winsound.SND_ASYNC)
這個(gè)函數(shù) alarm() 是在一個(gè)單獨(dú)的線程中運(yùn)行的,該線程每隔一秒鐘檢查一次當(dāng)前時(shí)間是否等于設(shè)置的時(shí)間。如果當(dāng)前時(shí)間和設(shè)置時(shí)間相等,就會調(diào)用 winsound.PlaySound() 播放一個(gè)音樂文件,表示時(shí)間到了。
在函數(shù)開頭,首先通過 hour.get()、minute.get() 和 second.get() 獲取用戶在界面上設(shè)置的小時(shí)、分鐘和秒數(shù),然后將它們組合成一個(gè)字符串 set_alarm_time。接下來,使用 time.sleep() 讓線程休眠 1 秒鐘,這樣每隔 1 秒鐘就會檢查一次當(dāng)前時(shí)間是否等于設(shè)置時(shí)間。
然后,通過 datetime.datetime.now().strftime("%H:%M:%S") 獲取當(dāng)前時(shí)間,并將其格式化為小時(shí)、分鐘和秒數(shù)的字符串 current_time。最后,如果 current_time 等于 set_alarm_time,就會打印一條消息并調(diào)用 winsound.PlaySound() 播放一個(gè)音樂文件。
Label(root,text="Alarm Clock",font=("Helvetica 20 bold"),fg="red").pack(pady=10) Label(root,text="Set Time",font=("Helvetica 15 bold")).pack() frame = Frame(root) frame.pack() hour = StringVar(root) hours = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24' ) hour.set(hours[0]) hrs = OptionMenu(frame, hour, *hours) hrs.pack(side=LEFT) minute = StringVar(root) minutes = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60') minute.set(minutes[0]) mins = OptionMenu(frame, minute, *minutes) mins.pack(side=LEFT) second = StringVar(root) seconds = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60') second.set(seconds[0]) secs = OptionMenu(frame, second, *seconds) secs.pack(side=LEFT) Button(root,text="Set Alarm",font=("Helvetica 15"),command=Threading).pack(pady=20)
這段代碼用于添加標(biāo)簽、框架、按鈕和選項(xiàng)菜單。先創(chuàng)建了一個(gè)框架 frame,然后創(chuàng)建了三個(gè) StringVar 類型的變量 hour,minute,second 來存儲用戶選擇的小時(shí)、分鐘和秒數(shù)。然后定義了三個(gè)元組 hours,minutes,seconds 分別存儲 00 到 60 的數(shù)字字符串,其中的 0~9 數(shù)字前面補(bǔ)零,保證格式一致。接著用 OptionMenu 創(chuàng)建了三個(gè)選項(xiàng)菜單,分別用來選擇小時(shí)、分鐘和秒數(shù)。
綜上所述,本文提供了一個(gè)基本的鬧鐘應(yīng)用程序,可以通過GUI界面設(shè)置和啟動。當(dāng)鬧鐘時(shí)間到達(dá)時(shí),應(yīng)用程序?qū)⒉シ怕曇簦蕴嵝延脩簟?/p>
附完整源碼:
# 導(dǎo)入所需庫 from tkinter import * import datetime import time import winsound from threading import * # 創(chuàng)建對象 root = Tk() # 設(shè)置幾何體 root.geometry("400x200") # 使用線程 def Threading(): t1=Thread(target=alarm) t1.start() def alarm(): # 無限循環(huán) while True: # 設(shè)置警報(bào) set_alarm_time = f"{hour.get()}:{minute.get()}:{second.get()}" # 等待一秒鐘 time.sleep(1) # 獲取當(dāng)前時(shí)間 current_time = datetime.datetime.now().strftime("%H:%M:%S") print(current_time,set_alarm_time) # 檢查設(shè)置的報(bào)警是否等于當(dāng)前時(shí)間 if current_time == set_alarm_time: print("Time to Wake up") # 播放聲音 winsound.PlaySound("sound.wav",winsound.SND_ASYNC) # 添加標(biāo)簽、框架、按鈕、選項(xiàng)菜單 Label(root,text="Alarm Clock",font=("Helvetica 20 bold"),fg="red").pack(pady=10) Label(root,text="Set Time",font=("Helvetica 15 bold")).pack() frame = Frame(root) frame.pack() hour = StringVar(root) hours = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24' ) hour.set(hours[0]) hrs = OptionMenu(frame, hour, *hours) hrs.pack(side=LEFT) minute = StringVar(root) minutes = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60') minute.set(minutes[0]) mins = OptionMenu(frame, minute, *minutes) mins.pack(side=LEFT) second = StringVar(root) seconds = ('00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60') second.set(seconds[0]) secs = OptionMenu(frame, second, *seconds) secs.pack(side=LEFT) Button(root,text="Set Alarm",font=("Helvetica 15"),command=Threading).pack(pady=20) # 執(zhí)行Tkinter root.mainloop()
到此這篇關(guān)于Python+Tkinter創(chuàng)建一個(gè)簡單的鬧鐘程序的文章就介紹到這了,更多相關(guān)Python Tkinter鬧鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)孤立隨機(jī)森林算法的示例代碼
孤立森林(isolation?Forest)是一種高效的異常檢測算法,它和隨機(jī)森林類似,但每次選擇劃分屬性和劃分點(diǎn)(值)時(shí)都是隨機(jī)的,而不是根據(jù)信息增益或基尼指數(shù)來選擇。本文將用Python實(shí)現(xiàn)這一算法,需要的可以參考一下2022-03-03幾個(gè)適合python初學(xué)者的簡單小程序,看完受益匪淺!(推薦)
這篇文章主要介紹了幾個(gè)適合python初學(xué)者的簡單小程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04python根據(jù)list重命名文件夾里的所有文件實(shí)例
今天小編就為大家分享一篇python根據(jù)list重命名文件夾里的所有文件實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python操作MongoDb數(shù)據(jù)庫流程詳解
這篇文章主要介紹了Python操作MongoDb數(shù)據(jù)庫流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03淺談python裝飾器探究與參數(shù)的領(lǐng)取
下面小編就為大家分享一篇淺談python裝飾器探究與參數(shù)的領(lǐng)取,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12python pandas模糊匹配 讀取Excel后 獲取指定指標(biāo)的操作
這篇文章主要介紹了python pandas模糊匹配 讀取Excel后 獲取指定指標(biāo)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03使用Python制作新型冠狀病毒實(shí)時(shí)疫情圖
最近被新型冠狀病毒搞的人心惶惶,很多城市被病毒感染,今天小編給大家分享使用Python制作新型冠狀病毒實(shí)時(shí)疫情圖,感興趣的朋友跟隨小編一起看看吧2020-01-01