wxpython实现LED计时器

#! /usr/bin/env python
#-*- encoding:UTF-8 -*-
##########################
#1.正向计时\逆计时\时钟
#2.使用sizer管理布局
##########################
import wx
import time
import wx.gizmos as gizmos
ICON_START = ‘|>‘
ICON_SUSPEND = ‘||‘
ICON_RESTART = ‘<|‘
TIMETOCOUNT = 40*60#四十分钟倒计时
class ClockWindow(wx.Window):
    """LED CLOCK"""
    def __init__(self, parent=None, id=-1):
        wx.Window.__init__(self, parent, id, size=(258,92))
        #wx.Window.__init__(self, parent, id, size=sz)
        self.parent = parent
        
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.timer = wx.Timer(self)#创建定时器
        self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)#绑定一个定时器事件
        self.timeToCount = 0#累计秒数
        w,h = self.GetClientSize()
        #print w,h
        #self.led = gizmos.LEDNumberCtrl(self, -1, (0,0), (200, 50), gizmos.LED_ALIGN_CENTER)
        #self.led = gizmos.LEDNumberCtrl(self, -1, wx.DefaultPosition, wx.DefaultSize, gizmos.LED_ALIGN_CENTER)
        self.led = gizmos.LEDNumberCtrl(self, -1, wx.DefaultPosition, (w-10,h-30), gizmos.LED_ALIGN_CENTER)
        self.led.SetBackgroundColour("black")
        self.led.SetForegroundColour("red")

        #开始按钮
        #self.startButton = wx.Button(self, id, label=ICON_START, size=(50,30),pos=(0,50))
        self.startButton = wx.Button(self, id, label=ICON_START)
        self.startButton.SetToolTip(wx.ToolTip(‘Start‘))
        self.Bind(wx.EVT_BUTTON, self.OnStart, self.startButton)

        #暂停按钮
        #self.suspendButton = wx.Button(self, id, label=ICON_SUSPEND, size=(55,30), pos=(75,50))
        self.suspendButton = wx.Button(self, id, label=ICON_SUSPEND)
        self.suspendButton.SetToolTip(wx.ToolTip(‘Suspend‘))
        self.Bind(wx.EVT_BUTTON, self.OnStop, self.suspendButton)

        #重新开始按钮
        #self.restartButton = wx.Button(self, id, label=ICON_RESTART, size=(55,30), pos=(146,50))
        self.restartButton = wx.Button(self, id, label=ICON_RESTART)
        self.restartButton.SetToolTip(wx.ToolTip(‘Restart‘))
        self.Bind(wx.EVT_BUTTON, self.OnRestart, self.restartButton)

        self.timeRadio = wx.RadioButton(self, -1, "时钟".decode(‘UTF-8‘), style=wx.RB_GROUP)
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.timeRadio)
        self.timerRadio = wx.RadioButton(self, -1, "正计时".decode(‘UTF-8‘))
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.timerRadio)
        self.timer_rRadio = wx.RadioButton(self, -1, "倒计时".decode(‘UTF-8‘))
        self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, self.timer_rRadio)

        #sizer
        sizer = wx.GridBagSizer(hgap = 10, vgap = 10)
        sizer.Add(self.led, pos=(0, 0), span=(1,3), flag=wx.EXPAND)

        sizer.Add(self.startButton, pos=(1, 0),  flag = wx.EXPAND)
        sizer.Add(self.suspendButton, pos=(1, 1),  flag = wx.EXPAND)
        sizer.Add(self.restartButton, pos=(1, 2),  flag = wx.EXPAND)

        sizer.Add(self.timeRadio, pos=(2,0), flag=wx.ALIGN_CENTER)
        sizer.Add(self.timerRadio, pos=(2,1), flag=wx.ALIGN_CENTER)
        sizer.Add(self.timer_rRadio, pos=(2,2), flag=wx.ALIGN_CENTER)
        self.SetSizer(sizer)
        self.Fit()

        self.IsSuspend = False

    def OnTimer(self, evt):#显示时间事件处理函数
        st = "00 00 00"
        if self.timeRadio.GetValue():#显示时间
            st = time.strftime(‘%H %M %S‘, time.localtime())
        elif self.timerRadio.GetValue():#正向计时
            self.timeToCount += 1
            second = self.timeToCount
            h = second / 3600
            m = second / 60
            s = second % 60
            st = "%02d %02d %02d" %(h, m, s)
        else:#逆向计时
            self.timeToCount -= 1
            second = self.timeToCount
            if second <= 0:
                self.timer.Stop()
                dlg = wx.MessageDialog(None, "休息5分钟!".decode(‘UTF-8‘), "Message", wx.OK|wx.ICON_INFORMATION)
                retCode = dlg.ShowModal()
            h = second / 3600
            m = second / 60
            s = second % 60
            st = "%02d %02d %02d" %(h, m, s)
        self.led.SetValue(st)

    def OnPaint(self, evt):
        st = "%02d %02d %02d" %(0, 0, 0)
        self.led.SetValue(st)
        self.Fit()

    def OnStart(self, evt):
        if self.timeRadio.GetValue():#显示时间
            self.startButton.Disable()
            self.suspendButton.Disable()
            self.restartButton.Disable()
        elif self.timerRadio.GetValue():#正向计时
            if self.IsSuspend:
                self.suspendButton.Enable()
            else:
                self.timeToCount = 0
            self.startButton.Disable()
            self.restartButton.Enable()
            self.suspendButton.Enable()
        else:#逆向计时
            if self.IsSuspend:
                self.suspendButton.Enable()
            else:
                self.timeToCount = TIMETOCOUNT
            self.restartButton.Enable()
            self.suspendButton.Enable()
        self.timer.Start(1000)
        self.IsSuspend = False

    def OnStop(self, evt):#suspend
        if not self.IsSuspend:
            self.startButton.Enable()
            self.suspendButton.Disable()
            self.timer.Stop()
            self.IsSuspend = True

    def OnRestart(self, evt):
        if self.timerRadio.GetValue():#正向计时
            if self.IsSuspend:
                self.suspendButton.Enable()
            else:
                self.timeToCount = 0
            self.startButton.Disable()
            self.restartButton.Enable()
            self.suspendButton.Enable()
        else:#逆向计时
            self.startButton.Disable()
            self.suspendButton.Enable()
            self.timeToCount = TIMETOCOUNT
        self.timer.Start(1000)
        self.IsSuspend = False

    def OnRadio(self, evt):
        self.timer.Stop()
        self.led.SetValue("00 00 00")
        self.startButton.Enable()
        self.suspendButton.Disable()
        self.restartButton.Disable()
        self.IsSuspend = False

class ClockFrame(wx.Frame):
    
    def __init__(self, parent =None, id=-1):
        wx.Frame.__init__(self, parent, id, "LED v0.5", size=(300, 170))
        self.SetMaxSize((300, 170))
        self.SetMinSize((300, 170))
        clockWindow = ClockWindow(self, id)

if __name__ == ‘__main__‘:
    app = wx.PySimpleApp()
    frame = ClockFrame()
    frame.Show()
    app.MainLoop()

wxpython实现LED计时器

时间: 2024-10-22 08:15:26

wxpython实现LED计时器的相关文章

子母钟系统介绍

标准时钟系统又称为母钟为需要授时设备提供标准时间信号.子钟又称时钟,接收母钟的标准时间信号.母钟可以接收GPS.北斗.GLONASS.等卫星信号,作为标准时间信号,为计算机系统.子钟.监控设备.弱电子系统.及其他需要授时的设备提供标准时间信号. 随着科技的发展,机械式母钟慢慢被石英母钟和与原子母钟代替,子钟也由单一的接收信号方式改变为多种不同的接收信号方式.母钟和子钟因为其用途.传输方式或接收信号方式不一样也分为很多种类,母钟可分为NTP网络时间服务器.GPS北斗NTP网络时间服务器.CDMA时

I/O输出端口照明LED

方案特点:I/O输出端口照明LED.而区间0.2秒闪烁!(非计时器延迟) (P1.0销被连接到LED) LED EQU P1.0 ;宏定义 ORG 0000H LJMP MAIN ORG 0200H MAIN: SETB LED ;不亮 CALL DELAY ;延时0.2秒 CLR LED ;亮 CALL DELAY ;延时0.2秒 AJMP MAIN DELAY: MOV 50H,#200;延时子程序,定时0.2秒 DELAYms:MOV 52H,#20 DELAYa: MOV 51H,#20

WinForm LED循环显示信息,使用定时器Threading.Timer

原文:WinForm LED循环显示信息,使用定时器Threading.Timer 这里用一个示例来演示timer如何使用.示例:LED屏幕显示描述:这个示例其实很简单,LED屏幕上显示3个信息:        1:排队叫号         2:催缴费         3:等待列表.因为LED屏幕大小的关系,列表需要分页显示. 正常情况下,这3个信息都需要从服务器上去获得,这里的示例只做简单的模拟, 界面很简单,如图,这里我就不美化了. Timer构造函数参数说明: Callback:一个 Ti

《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作

1基础理论部分 1.1分频 分频,是的,这个概念也很重要.分频是指将一单一频率信号的频率降低为原来的1/N,就叫N分频.实现分频的电路或装置称为“分频器”,如把33MHZ的信号2分频得到16.5MHZ的信号,3分频得到11MHZ的信号,10分频得到3.3MHZ的信号. 分频主要是相对于主晶振来说,用不到那么高的频率,开发板一般根据具体需要会加入晶振,一般若是功耗较高可选用50MHz,其他情况可以相对调整,如24MHz等等.那么分频的典型应用,二分频,四分频,八分频,还有任意分频. 对于分频,我们

wxpython 中的所有控件及高级应用

转自http://xoomer.virgilio.it/infinity77/Phoenix/lib.agw.html,,,哈哈终于找到了这块的内容,书上基本没有讲解 This is the Advanced Generic Widgets package (AGW). It provides many custom-drawn wxPython controls: some of them can be used as a replacement of the platform native

PIC12F629帮我用C语言写个程序,控制三个LED亮灭

http://power.baidu.com/question/240873584599025684.html?entry=browse_difficult PIC12F629帮我用C语言写个程序,控制三个LED亮灭! 2014-12-31 16:05DINZEYU  分类:C/C++ | 浏览 87 次 C语言VC++ 按键按一次LED1低亮,按两次高亮,按三次2HZ闪,按三次关,按键长按3秒松开LED2亮,长按3秒松开LED2灭,按键长按5秒松开LED3亮,长按5秒松开LED3灭,每个功能独

fl2440 platform总线led字符设备驱动

首先需要知道的是,设备跟驱动是分开的.设备通过struct device来定义,也可以自己将结构体封装到自己定义的device结构体中: 例如:struct platform_device: 1 在include/linux/platform_device.h文件中: //这个位置还是个盲点,我一直没找到这个位置在哪里 2 struct platform_device { 3 const char * name 4 u32 id 5 struct device dev 6 u32 num_res

第8章 计时器

8.1 计时器的基本知识 (1)SetTimer时间参数:1毫秒到4294 967 295毫秒(近50天) (2)Windows本身处理BIOS中断,应用程序不需介入,Windows会每个计时器保持一个计数值,硬件时钟滴答一次,这个值减1.当计数为0时,发送WM_TIMER到消息队列,同时计数值重新恢复到原始值. (3)WIN98的计时器周期约为55毫秒,Windows NT大约为10毫秒.即SetTimer参数小于这个数值,则根据操作系统取其中的一个值.SetTimer会把指定的时间间隔舍入到

期中测试( 制作一个秒表计时器 )

制作一个秒表计时器,记录0-15秒时间.要求精准,可控. 1.能够用按键控制秒表开始 2.能够用按键控制秒表停止 3.能够用按键控制秒表清零 4.使用定时器控制时间,要求精确. 5.使用1个数码管和多个按键实现功能. #include<reg52.h> #define LED P0 sbit KEY1 =P1^0; sbit KEY2 =P1^4; unsigned int i = 0; unsigned char n = 0; unsigned char LED_NUM[] = {0xc0,