用python編寫一個(gè)鬧鐘小程序

今天看到了一個(gè)鬧鐘的視頻,于是想到了不如自己也編寫一個(gè)满着。讓我們先來理一下思路谦炒,界面用tkinter編輯,主要是其他的GUI也沒用過风喇,datetime獲取本地時(shí)間宁改。。响驴。透且。。豁鲤。

1.好的秽誊,思路理完了,讓我們來敲代碼吧琳骡。先創(chuàng)建一個(gè)AlarmClock類繼承自Tk锅论,控件什么的隨便放放,也不用追求什么美觀了楣号。

class AlarmClock(Tk):
    def __init__(self):
        super().__init__()
        self.title('我的鬧鐘')
        self.minsize(width=300, height=300)

        # 設(shè)置控件
        Label(self, text='現(xiàn)在時(shí)間:', font=('Arial', 15)).place(x=10, y=10)

        self.now_time = str(datetime.now()).split('.')[0]    #獲取本地時(shí)間
        self.var_nowtime = StringVar(value=self.now_time)
        Label(self, textvariable=self.var_nowtime, font=('Arial', 15), bg='#D6EAF8').place(x=50, y=50)

        # 鬧鐘的時(shí)間設(shè)置部分用了三個(gè)entry控件輸入時(shí)分秒
        Label(self, text='設(shè)置鬧鐘:', font=('Arial', 15)).place(x=10, y=90)
        self.var_hour = StringVar(value='00')
        self.var_min = StringVar(value='00')
        self.var_sec = StringVar(value='00')
        self.entry_hour = Entry(self, textvariable=self.var_hour, font=('Arial', 15), bg='#D6EAF8', width=3,
                                justify='center')
        self.entry_hour.place(x=60, y=130)
        Label(self, text=':', font=('Arial', 15)).place(x=105, y=130)
        self.entry_min = Entry(self, textvariable=self.var_min, font=('Arial', 15), bg='#D6EAF8', width=3,
                               justify='center')
        self.entry_min.place(x=120, y=130)
        Label(self, text=':', font=('Arial', 15)).place(x=165, y=130)
        self.entry_sec = Entry(self, textvariable=self.var_sec, font=('Arial', 15), bg='#D6EAF8', width=3,
                               justify='center')
        self.entry_sec.place(x=180, y=130)

        # 因?yàn)橹荒茉O(shè)定一個(gè)鬧鐘最易,所以再次設(shè)定的話要重置
        self.btn_replace = Button(self, text='重置', font=('Arial', 12), width=5, command=self.replace)
        self.btn_replace.place(x=70, y=180)
        # 開關(guān)按鈕控制鬧鐘的開和關(guān),初始是OFF狀態(tài)炫狱,點(diǎn)擊變成ON狀態(tài)啟動(dòng)鬧鐘
        self.btn_begin = Button(self, text='OFF', font=('Arial', 12), width=5, command=self.beginning)
        self.btn_begin.place(x=150, y=180)

下面是界面圖

4)72V({PY5V_L7B9~BRWBVO.png

2.接下來就是編輯兩個(gè)按鈕的功能函數(shù)了
開關(guān)按鈕

    def beginning(self):
        flag = self.btn_begin['text']      # 定義一個(gè)flag來表示鬧鐘的狀態(tài)
        # 如果是打開狀態(tài)就什么也不做
        if flag == 'ON':
            return
        # 如果是關(guān)閉狀態(tài)藻懒,就把text變?yōu)镺N,三個(gè)輸入框變?yōu)椴豢删庉?        else:
            self.btn_begin['text'] = 'ON'
            self.entry_hour['state'] = DISABLED
            self.entry_min['state'] = DISABLED
            self.entry_sec['state'] = DISABLED
            # 獲取三個(gè)輸入框內(nèi)的時(shí)間
            set_time = '%s:%s:%s' % (self.entry_hour.get(), self.entry_min.get(), self.entry_sec.get())
            list_time = []
            for i, j in zip(set_time.split(':'), self.now_time.split(' ')[-1].split(':')):
                # 計(jì)算離鬧鐘啟動(dòng)還有多少時(shí)間
                list_time.append(abs(int(i) - int(j)))
            messagebox.showinfo(title='設(shè)置成功', message='距離啟動(dòng)還有%d小時(shí)%d分%d秒' % tuple(list_time))

重置按鈕

    def replace(self):
        # 重置按鈕把三個(gè)輸入框內(nèi)容變?yōu)?0视译,同時(shí)變?yōu)榭删庉嫚顟B(tài)嬉荆,開關(guān)按鈕變?yōu)镺FF
        self.var_hour.set('00')
        self.var_min.set('00')
        self.var_sec.set('00')
        self.btn_begin['text'] = 'OFF'
        self.entry_hour['state'] = NORMAL
        self.entry_min['state'] = NORMAL
        self.entry_sec['state'] = NORMAL
        messagebox.showinfo(title='重置成功', message='重置成功')

3.現(xiàn)在Label顯示的本地時(shí)間是靜止的,要想讓它動(dòng)起來則需要在死循環(huán)內(nèi)不斷使用update()方法酷含,所以我們?cè)偌右粋€(gè)死循環(huán)的方法timer

    def timer(self):
        player = ctypes.windll.kernel32    # 這個(gè)模塊我也不是太清楚鄙早,這里是用來產(chǎn)生蜂鳴的
        while True:
            self.now_time = str(datetime.now()).split('.')[0]    
            self.var_nowtime.set(self.now_time)
            self.update()

            set_time = '%s:%s:%s' % (self.entry_hour.get(), self.entry_min.get(), self.entry_sec.get())
            if self.btn_begin['text'] == 'ON':
                # 設(shè)定時(shí)間和本地時(shí)間一致汪茧,鬧鐘就響1.5秒
                if set_time == self.now_time.split(' ')[-1]:
                    for i in range(3):
                         # 人耳能聽到的頻率是20~20000HZ,這里設(shè)定2000HZ限番,500ms
                        player.Beep(2000, 500)   

            time.sleep(1)    # 1秒鐘更新一次

到這里這個(gè)簡單的小程序就完成了舱污,是不是很簡單呢。代碼其實(shí)還有很多可以擴(kuò)展的地方弥虐,比如可以設(shè)定多個(gè)鬧鐘(就像手機(jī)上一樣)扩灯。還可以定時(shí)關(guān)機(jī)什么的,看你自由發(fā)揮了躯舔。其實(shí)代碼很簡單驴剔,難的是把界面編輯的好看美觀。如果有什么疑問或指教粥庄,歡迎交流丧失。


image.png

這是最終的效果圖,在設(shè)定完時(shí)間后點(diǎn)擊開關(guān)按鈕會(huì)彈出提示框惜互。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘦黑,一起剝皮案震驚了整個(gè)濱河市疚俱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖栏豺,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件但惶,死亡現(xiàn)場離奇詭異酿矢,居然都是意外死亡动漾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門鲁沥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呼股,“玉大人,你說我怎么就攤上這事画恰∨硭” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵允扇,是天一觀的道長缠局。 經(jīng)常有香客問我,道長考润,這世上最難降的妖魔是什么狭园? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮糊治,結(jié)果婚禮上妙啃,老公的妹妹穿的比我還像新娘。我一直安慰自己俊戳,他們只是感情好揖赴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抑胎,像睡著了一般燥滑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阿逃,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天铭拧,我揣著相機(jī)與錄音,去河邊找鬼恃锉。 笑死搀菩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的破托。 我是一名探鬼主播肪跋,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼土砂!你這毒婦竟也來了州既?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤萝映,失蹤者是張志新(化名)和其女友劉穎吴叶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體序臂,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚌卤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奥秆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逊彭。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吭练,靈堂內(nèi)的尸體忽然破棺而出诫龙,到底是詐尸還是另有隱情,我是刑警寧澤鲫咽,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布签赃,位于F島的核電站,受9級(jí)特大地震影響分尸,放射性物質(zhì)發(fā)生泄漏锦聊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一箩绍、第九天 我趴在偏房一處隱蔽的房頂上張望孔庭。 院中可真熱鬧,春花似錦、人聲如沸圆到。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芽淡。三九已至马绝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挣菲,已是汗流浹背富稻。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留白胀,地道東北人椭赋。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像或杠,于是被迫代替她去往敵國和親哪怔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容