aboutsummaryrefslogtreecommitdiffstats
path: root/examples/gui/analogclock/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gui/analogclock/main.py')
-rw-r--r--examples/gui/analogclock/main.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/examples/gui/analogclock/main.py b/examples/gui/analogclock/main.py
new file mode 100644
index 000000000..c0e00dd93
--- /dev/null
+++ b/examples/gui/analogclock/main.py
@@ -0,0 +1,92 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import sys
+
+from PySide6.QtCore import QPoint, QTimer, QTime, Qt
+from PySide6.QtGui import QGuiApplication, QPainter, QPalette, QPolygon, QRasterWindow
+
+"""Simplified PySide6 port of the gui/analogclock example from Qt v6.x"""
+
+
+class AnalogClockWindow(QRasterWindow):
+
+ def __init__(self):
+ super().__init__()
+ self.setTitle("Analog Clock")
+ self.resize(200, 200)
+
+ self._timer = QTimer(self)
+ self._timer.timeout.connect(self.update)
+ self._timer.start(1000)
+
+ self._hour_hand = QPolygon([QPoint(5, 14), QPoint(-5, 14),
+ QPoint(-4, -71), QPoint(4, -71)])
+ self._minute_hand = QPolygon([QPoint(4, 14), QPoint(-4, 14),
+ QPoint(-3, -89), QPoint(3, -89)])
+ self._seconds_hand = QPolygon([QPoint(1, 14), QPoint(-1, 14),
+ QPoint(-1, -89), QPoint(1, -89)])
+
+ palette = qApp.palette() # noqa: F821
+ self._background_color = palette.color(QPalette.Window)
+ self._hour_color = palette.color(QPalette.Text)
+ self._minute_color = palette.color(QPalette.Text)
+ self._seconds_color = palette.color(QPalette.Accent)
+
+ def paintEvent(self, e):
+ with QPainter(self) as painter:
+ self.render(painter)
+
+ def render(self, painter):
+ width = self.width()
+ height = self.height()
+
+ side = min(width, height)
+
+ painter.fillRect(0, 0, width, height, self._background_color)
+ painter.setRenderHint(QPainter.Antialiasing)
+ painter.translate(width / 2, height / 2)
+ painter.scale(side / 200.0, side / 200.0)
+
+ time = QTime.currentTime()
+
+ painter.setPen(Qt.NoPen)
+ painter.setBrush(self._hour_color)
+
+ painter.save()
+ painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)))
+ painter.drawConvexPolygon(self._hour_hand)
+ painter.restore()
+
+ for _ in range(0, 12):
+ painter.drawRect(73, -3, 16, 6)
+ painter.rotate(30.0)
+
+ painter.setBrush(self._minute_color)
+
+ painter.save()
+ painter.rotate(6.0 * time.minute())
+ painter.drawConvexPolygon(self._minute_hand)
+ painter.restore()
+
+ painter.setBrush(self._seconds_color)
+
+ painter.save()
+ painter.rotate(6.0 * time.second())
+ painter.drawConvexPolygon(self._seconds_hand)
+ painter.drawEllipse(-3, -3, 6, 6)
+ painter.drawEllipse(-5, -68, 10, 10)
+ painter.restore()
+
+ painter.setPen(self._minute_color)
+
+ for _ in range(0, 60):
+ painter.drawLine(92, 0, 96, 0)
+ painter.rotate(6.0)
+
+
+if __name__ == "__main__":
+ app = QGuiApplication(sys.argv)
+ clock = AnalogClockWindow()
+ clock.show()
+ sys.exit(app.exec())