Python TK实现的闹钟

核心技术就是TK的UI、定时器(scheduler)的corn和播放音乐(playgame)。

UI部分


    def job(self):
        # tkinter简单示例源码
        import tkinter as tk
        # 调用Tk()创建主窗口
        self.window = tk.Tk()
        self.window.wm_attributes('-topmost', 1)
        self.window.configure(background=TkPlugin.background())
        self.window.rowconfigure(0, weight=1)
        self.window.rowconfigure(3, weight=1)
        self.window.columnconfigure(0, weight=1)
        # 第1行
        self.lable_void1 = AdenLabel(self.window)
        self.lable_void1.grid(row=0, column=0, sticky=TkPlugin.sticky_all())
        # 第2行
        self.lable_message = AdenLabel(self.window, text="L2打个人", font='Helvetica -30 bold')
        self.lable_message.config(fg="#D9534F")
        self.lable_message.grid(row=1, column=0, sticky=TkPlugin.sticky_all())
        # 第3行
        self.lable_time = AdenLabel(self.window, text="2021-11-11 9:37:20", font='Helvetica -30 bold')
        self.lable_time.grid(row=2, column=0,  sticky=TkPlugin.sticky_all())
        # 第4行
        self.lable_void1 = AdenLabel(self.window)
        self.lable_void1.grid(row=3, column=0, sticky=TkPlugin.sticky_all())
        # 第5行
        btn_stop = AdenButton(self.window, text="停止音乐", width=8, command=lambda: self.stop())
        btn_stop.grid(row=4, column=0, sticky=tkinter.E, padx="70")
        btn_close = AdenButton(self.window, text="关闭闹钟", bg="#D9534F", width=8, command=lambda: self.close())
        btn_close.grid(row=4, column=0, sticky=tkinter.E)

        screenWidth = self.window.winfo_screenwidth()  # 屏幕宽度
        screenHeight = self.window.winfo_screenheight()  # 屏幕高度
        w=400
        h=300
        x=screenWidth-w-20
        y=screenHeight-h-80
        # 设置窗口大小和位置:窗口的宽与高,窗口距离屏幕的左边距和上边距
        self.window.geometry("%dx%d+%d+%d" % (w, h, x, y))
        # 给窗口起一个名字,也就是窗口的名字
        self.window.title("亚丁号闹钟")


        T = threading.Thread(target=self.music, args=())
        T.setDaemon(True)
        T.start()
        self.show()
        # 开启主循环,让窗口处于显示状态
        self.window.mainloop()

调度部分,写成固定值了 大家自己改一改,

  def builder_aps_task(self):
        scheduler = BlockingScheduler(timezone='Asia/Shanghai')
        scheduler.add_job(self.job, 'cron', day="*", hour="8", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="10", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="12", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="14", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="16", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="18", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="20", minute="55")
        scheduler.add_job(self.job, 'cron', day="*", hour="22", minute="55")

        scheduler.add_job(self.job, 'cron', day="*", hour="0", minute="23")

        scheduler.add_job(self.job, 'cron', day="*", hour="0", minute="24")
        #ApsMonitorAlarmClock().job()
        # scheduler = BlockingScheduler(timezone='Asia/Shanghai')
        # scheduler.add_job(self.__show, 'interval', seconds=1)
        # scheduler.start()

        scheduler.start()

音乐部分

    def music(self):
        music_array=["精灵村.mp3","猎人村.mp3","说话岛.mp3","芙罗兰村庄.mp3"
            ,"水上都市海因斯.mp3","奇岩城镇.mp3","古鲁丁村庄.mp3","亚丁城镇.mp3"
            ,"命运的召唤.mp3","CrossroadAtDawn.mp3","AfterTheStorm.mp3"]
        index=random.randint(0, len(music_array)-1)
        #file = Tools.get_resource_mp3_path() + os.sep +  music_array[index]
        file = "D:\\Code\\Python\\AdenHunter\\framework\\resource\\mp3" + os.sep + music_array[index]
        pygame.mixer.init()
        pygame.mixer.music.load(file)
        pygame.mixer.music.play(loops=10) # pygame.mixer.music.play(-1)
        while pygame.mixer.music.get_busy():  # 在音频播放为完成之前不退出程序
            pass

按钮和刷新时间方法


    def stop(self):
        pygame.mixer.music.stop()

    def close(self):

        pygame.mixer.music.stop()
        if self.T is not None:
            Tools.stop_thread(self.T)
        self.window.destroy()
        pass

    def show(self):
        self.T = threading.Thread(target=self.__show, args=())
        self.T.setDaemon(True)
        self.T.start()

    def __show(self):
        while 1:
                now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
                self.lable_time['text'] = '{0}'.format(now_time)
                time.sleep(1)

好了细节大家自能是自己改一改了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亚丁号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值