Source code for blnuhr.main

# Copyright (c) 2009 - 2018, Pete Jemian.
# See LICENSE file for details.

import datetime
import os
import sys
from PyQt4 import QtCore, QtGui
import resources


CLOCK_UI_FILE = 'blnuhr.ui'
ORANGE = {0:'''background-color: rgb(130, 85, 64);
               color: rgb(130, 85, 64);''',
          1:'''background-color: rgb(255, 170, 127);
               color: rgb(255, 170, 127);''',
         }
RED = {0:'background-color: rgb(128, 42, 64);',
       1:'background-color: rgb(255, 85, 127);',
      }
REFRESH_TIME__MS = 100


[docs]class Clock_blnuhr(QtGui.QWidget): '''create a widget for the clock and start it running''' def __init__(self, **_kwargs): QtGui.QWidget.__init__(self) resources.loadUi(CLOCK_UI_FILE, self) self.last_t = None self.update(None)
[docs] def start(self): '''begin the periodic update of the clock''' self.timer = QtCore.QTimer(self) QtCore.QObject.connect(self.timer, QtCore.SIGNAL('timeout()'), self.update) self.timer.start(REFRESH_TIME__MS)
[docs] def update(self, t=None): ''' manage a periodic update of the clock Show the time as a string on the seconds LED as a tool tip ''' def set_LIGHT(w, color, choice): w.setStyleSheet(str(color[choice])) t = t or datetime.datetime.now() # seconds blinker set_LIGHT(self.l_s, ORANGE, t.microsecond / 500000) self.l_s.setToolTip(str(t)) color_scheme = {0: ORANGE, 1: ORANGE, 2: RED} # 5-hour markers if self.last_t is None or self.last_t.hour != t.hour: for n in range(4): label = "l_h5_{}".format(n+1) qlabel = self.__getattribute__(label) set_LIGHT(qlabel, RED, t.hour > 5*n+4) # 1-hour markers h = t.hour % 5 for n in range(4): label = "l_h1_{}".format(n+1) qlabel = self.__getattribute__(label) set_LIGHT(qlabel, ORANGE, h > n) # 5-minute markers if self.last_t is None or self.last_t.minute != t.minute: for n in range(11): label = "l_m5_{}".format(n+1) qlabel = self.__getattribute__(label) color = color_scheme[n % 3] set_LIGHT(qlabel, color, t.minute > 5*n+4) # 1-minute markers m = t.minute % 5 for n in range(4): label = "l_m1_{}".format(n+1) qlabel = self.__getattribute__(label) set_LIGHT(qlabel, ORANGE, m > n) # 5-second markers if self.last_t is None or self.last_t.second != t.second: for n in range(11): label = "l_s5_{}".format(n+1) qlabel = self.__getattribute__(label) color = color_scheme[n % 3] set_LIGHT(qlabel, color, t.second > 5*n+4) # 1-second markers s = t.second % 5 for n in range(4): label = "l_s1_{}".format(n+1) qlabel = self.__getattribute__(label) set_LIGHT(qlabel, ORANGE, s > n) # for next time self.last_t = t
[docs]def main (): '''entry point to run standalone''' app = QtGui.QApplication(sys.argv) clock = Clock_blnuhr() clock.show() clock.start() sys.exit(app.exec_())
if __name__ == '__main__': main()