#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
Ещё один пример того, как нужно рисовать на виджете. 
Программа, показывающая виждет, на котором нарисован циферблат.
Время на циферблате автоматически не обновляется (обновление происходит
толко тогда, когда окно было свёрнуто или перекрыто другими окнами, а затем
заново показано на экране).
"""

import sys
from PyQt4 import QtGui, QtCore
from math import sin, cos, pi
from datetime import datetime

class Example(QtGui.QWidget):
    
    def __init__(self):
        super(Example, self).__init__()
        
        self.initUI()
        
    def initUI(self):      

        self.setGeometry(300, 300, 280, 270)
        self.setWindowTitle('Clock')
        self.show()

    def paintEvent(self, e):

        qp = QtGui.QPainter() # Создаём класс для рисования
        qp.begin(self)        # начинаем рисовать на self, то есть на виджете.
        self.drawClock(qp)    # Само рисование проходит в методе drawClock.
        qp.end()              # Чтобы результаты всегда корректно отображались,
                              # у объектов класса QPainter надо вызвать метод end.
        
    def drawClock(self, qp):
      
        pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)
        qp.setPen(pen)

        w = self.width()
        h = self.height()
        r = 0.45 * min(w, h)

        qp.drawEllipse(w / 2 - r, h / 2 - r, 2 * r, 2 * r)
        for i in range(12):
            dx = r * sin(2 * pi * i / 12)
            dy = r * cos(2 * pi * i / 12)
            qp.drawLine(w / 2 + 0.9 * dx, h / 2 + 0.9 * dy, w / 2 + dx, h / 2 + dy)

        pen.setColor(QtCore.Qt.red)
        qp.setPen(pen)
        now = datetime.now()

        hour_angle = pi / 2 - 2 * pi * now.hour / 12
        qp.drawLine(w/2, h/2, w/2 + 0.6 * r * cos(hour_angle), h/2 - 0.6 * r * sin(hour_angle))
        # знак минус перед 0.6 * r * sin(hour_angle) вызван тем, что ось y направлена вниз.

        minute_angle = pi / 2 - 2 * pi * now.minute / 60
        qp.drawLine(w/2, h/2, w/2 + 0.8 * r * cos(minute_angle), h/2 - 0.8 * r * sin(minute_angle))
        
def main():
    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()