美文网首页
用wxpython製作鬧鐘程序

用wxpython製作鬧鐘程序

作者: Maliao | 来源:发表于2018-04-09 05:59 被阅读54次

    功能需求

    鬧鐘

    • 貪睡功能

    倒計時

    • 自動重複
    • 彈窗提醒

    碼表

    通用功能

    • 自訂鬧鈴聲音

    開發環境

    python 2.7
    wxpython
    

    思路心得

    主程序 Frame

    程序內的Label、button等都是透過座標做定位,如果程序視窗最大化將會破壞佈局,所以在Frame style選擇中不顯示"視窗最大化"按鈕。

    wx.Frame.__init__(self...,style=wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX | wx.TAB_TRAVERSAL)
    

    佈局

    功能上由於是透過下拉選單來選擇,所以佈局上都是透過Show or Hide來顯示對應功能的對象。

    self.Label_Stopwatch = wx.StaticText(self, wx.ID_ANY, u"00:00:00", (35, 90), wx.Size(200, 40), wx.TE_CENTRE)
    self.Label_SWcontent = wx.StaticText(self, wx.ID_ANY, u"", (110, 200), wx.Size(60, 85), wx.ST_NO_AUTORESIZE)
    
    self.GroupSW = [
        self.Label_Stopwatch,
        self.Label_SWcontent
    ]
    
    [i.Hide() for i in self.GroupSW]
    

    定時器

    主要功能核心"定時器 Timer",創建定時器時需要為定時器綁定一個event函數,再來可以根據情況設定運行時間(例如:一秒),默認會是循環運行(每隔一秒),也可設定參數只執行一次,在循環運行過程中也可以被按鈕事件觸發停止運行。

    • 系統時間定時器

    在創建程序時先執行每1秒獲取電腦時間的定時器,鬧鐘及倒計時功能都是與系統時間比對後實現的。

    
    def _OnRefresh(self, event):
        NowTime = time.strftime("%Y/%m/%d %H:%M:%S")
        self.Label_Nowtime.SetLabel(NowTime)
    
    
    self.timer1 = wx.Timer(self)
    self.Bind(wx.EVT_TIMER, self._OnRefresh, self.timer1)
    self.timer1.Start(1000)
    
    
    
    

    倒計時功能

    相比鬧鐘功能,倒計時在設計上不能以減一秒的方式進行判斷,由於在每次判斷都有毫秒差,時間一長就有分秒差,原先設定倒計時5分鐘的循環到後面提醒的時間將會越來越快。

    因此判斷上必須將"倒數時間+當前時間"設一個end變數,每隔一秒的判斷其實就是end減當前時間,如果有自動重複功能 也是end變數加上設定的倒數時間,這樣才不會有誤差。

    # 設定時間加上當前時間
    self.CDendtime = datetime.datetime.now() + datetime.timedelta(hours=int(h), minutes=int(m), seconds=int(s))
    
    # end變數減當前時間
    diff = self.CDendtime - datetime.datetime.now()
    
    if diff.total_seconds() <= 0:
        print("時間到~響鈴")
    
    

    Dialog

    Dialog對話彈窗,設定檔案路徑及提醒訊息,透過event呼叫的wx.Dialog,再將設定的值傳回類。

    def OnBeepSetting(self, event):
        dlg = wx.FileDialog(self, u" 聲音檔案路徑 ", wildcard="Wav files (*.wav)|*.wav")
        if dlg.ShowModal() == wx.ID_OK:
            self.Sound = wx.Sound(dlg.Path)
    
        dlg.Destroy()
    
    self.menuSetting = wx.MenuItem(self.Menu, 1, u" 鬧鈴聲音 ", help="")
    self.Bind(wx.EVT_MENU, self.OnBeepSetting, id=1)
    
    

    源碼地址

    相关文章

      网友评论

          本文标题:用wxpython製作鬧鐘程序

          本文链接:https://www.haomeiwen.com/subject/flfqfftx.html