Aplikacja desktopowa napisana w Pythonie przy użyciu biblioteki PyQt5. Projekt integruje cyfrowy zegar, precyzyjny stoper oraz minutnik (Timer) w jednym, spójnym interfejsie graficznym stylizowanym na retro wyświetlacze cyfrowe.
- Zegar (Clock): Wyświetla aktualny czas systemowy w czasie rzeczywistym.
- Stoper (Stopwatch):
- Pomiar z dokładnością do 10ms.
- Pełna obsługa stanów (Start, Stop, Reset).
- Blokada przycisku "Reset" podczas pracy stopera (UX safety).
- Minutnik (Timer):
- Możliwość wprowadzania dowolnego czasu w formacie
hh:mm:ss. - Odliczanie wsteczne.
- Możliwość wprowadzania dowolnego czasu w formacie
- Intuicyjna nawigacja: Płynne przełączanie między trybami bez przeładowywania okna.
Projekt został stworzony z myślą o czystej architekturze i dobrych praktykach Programowania Obiektowego.
Zamiast tworzyć osobne okna, wykorzystałem QStackedWidget do zarządzania widokami. Główna klasa MainWindow (w main.py) pełni rolę kontrolera, który przełącza widoki (indeksy) w zależności od sygnałów z przycisków.
Kod został podzielony na logiczne moduły. Każdy element funkcjonalny jest niezależną klasą dziedziczącą po QWidget:
Clock(clock.py)Stopwatch(stopwatch.py)MinuteHand(minute_hand.py)
Dzięki temu kod jest łatwy w utrzymaniu i rozbudowie.
Do obsługi upływu czasu wykorzystałem mechanizm QTimer oraz sygnały i sloty (Signals & Slots), co zapobiega "zamrażaniu" interfejsu graficznego podczas odliczania. Obliczenia czasu bazują na obiekcie QTime, co zapewnia precyzję operacji matematycznych na czasie.
Interfejs został ostylowany przy użyciu QSS (Qt Style Sheets) – odpowiednika CSS dla Qt.
- Załadowano niestandardowy font cyfrowy
DS-DIGII.TTF. - Zdefiniowano responsywne zachowanie przycisków (
:hover, stany aktywne).
PyQt-Stopwatch-Timer/
├── main.py # Punkt startowy (Main Window & Styles)
├── clock.py # Logika zegara systemowego
├── stopwatch.py # Logika stopera (z obsługą milisekund)
├── minute_hand.py # Logika minutnika (Timer)
├── DS-DIGII.TTF # Font cyfrowy
└── requirements.txt # Zależności projektu
- Dodanie walidacji danych wejściowych dla Minutnika (RegEx).
- Dodanie sygnału dźwiękowego po zakończeniu odliczania.
- Implementacja funkcjonalności "Lap" (międzyczasy) w Stoperze.
Podstawowa koncepcja zegara cyfrowego została zainspirowana świetnym tutorialem z kanału Bro Code. Podstawowa koncepcja pochodzi z kursu Bro Code, natomiast kod został przeze mnie gruntownie przebudowany i rozszerzony o:
- Dodanie modułu Minutnika (Timer) z możliwością ustawiania czasu.
- Implementacja QStackedWidget do płynnej nawigacji między widokami (w oryginale były to osobne okna/karty).
- Rozbudowa logiki Stopera (dodanie milisekund i blokady przycisków).
- Własny styl graficzny (CSS/QSS) i układ interfejsu.
