#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed Jun 24 11:56:20 2020 @author: steve """ import wx from datetime import datetime from math import sin, cos, pi #clockBushColorNamess={"face":,"hour":, "minute":, "second":} #clockPenColorNamess=={"face":,"hour":, "minute":, "second":} #{"face":wx.BLACK,"hour":wx.GREEN, "minute":wx.BLUE, "second":RED} class OddClock(wx.Panel): def __init__(self, P): super().__init__(P) # self.cdb=wx.ColourDatabase() # self.cfaceBrush-wx.Brush() # self.timer=wx.Timer(self) self.Bind(wx.EVT_TIMER, self.tic, self.timer) self.Bind(wx.EVT_SIZE, self.resize) self.Bind(wx.EVT_PAINT, self.repaint) self.SetMinSize((120,120)) self.SetSize(500,500) self.timer.Start(500) def stop(self, e=None): self.timer.Start(100) def start(self, e=None): self.timer.Start(500) def resize(self,e): W,H=self.Size def repaint(self, e): # print("paint") F=self.GetFont() dc=wx.PaintDC(self) W,H=self.Size R=min(W,H)*.95//2 cx,cy= W/2,H/2 rh=R/8 rm=R/10 rs=R/12 h,m,s=datetime.now().timetuple()[3:6] h%=12 B=wx.Brush(self.GetBackgroundColour()) dc.SetBrush(B) P=wx.Pen(self.GetForegroundColour()) P.SetWidth(10) dc.SetPen(P) dc.DrawCircle(cx,cy,R//1) pxy=lambda r,t: (r*cos(t)+cx, r*sin(t)+cy) dc.DrawCircle(cx,cy,R) ts= 2*pi*s/60-pi/2 m+=s/60 tm= 2*pi*m/60-pi/2 h+=m/60 th=2*pi*h/12 -pi/2 # print(f"{(h,m,s)}") fz=(0,int(rs*1.6)) F.SetPixelSize(fz) dc.SetFont(F) dc.SetBrush(wx.NullBrush) P.SetWidth(4) P.SetColour(wx.RED) dc.SetPen(P) r=R-rs-6 x,y=pxy(r,ts ) dc.DrawCircle(x,y,rs) dc.DrawText(str(int(s)), x-rs//2,y-rs) fz=(0,int(rm*1.6)) F.SetPixelSize(fz) dc.SetFont(F) P.SetWidth(6) P.SetColour(wx.BLUE) dc.SetPen(P) r=R-rm -6 x,y=pxy(r,tm ) dc.DrawCircle(x,y,rm) dc.DrawText(str(int(m)), x-rm//2,y-rm) fz=(0,int(rh*1.6)) F.SetPixelSize(fz) dc.SetFont(F) P.SetWidth(8) P.SetColour(wx.GREEN) dc.SetPen(P) r=R-rh -6 x,y=pxy(r,th ) dc.DrawCircle(x,y,rh) dc.DrawText(str(int(h)), x-rh//2,y-rh) # print("painted") def tic(self, e): self.Refresh() # print("tic",) class MyFrame(wx.Frame): def __init__(self, P = None): super().__init__(P, style=wx.CENTER|wx.DEFAULT_FRAME_STYLE) self.SetTitle("Steve's Odd Clock") pane=OddClock(self) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(pane, 1, wx.EXPAND, wx.ALL) self.SetBackgroundColour(wx.LIGHT_GREY) self.SetSize(550,550) self.SetSizerAndFit(sizer) self.pane = pane self.sizer = sizer #self.SetSize(wx.GetDisplaySize()) self.Bind(wx.EVT_CLOSE, self.Exit) self.SetSize(550,550) def Exit(self,e): print("Bye now") self.Show(0) print("It's dark now") self.Destroy() print("Gonzo") exit(0) class App(wx.App): def __init__(self): super(App, self).__init__() frame = MyFrame(None) frame.Show(True) if __name__ == '__main__': app = App() app.MainLoop()