Skip to content

Czarko-exe/PyQt-Stopwatch-Timer

Repository files navigation

⏱️ Digital Clock & Stopwatch Suite

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.

Podgląd Aplikacji

🚀 Funkcjonalności

  • 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.
  • Intuicyjna nawigacja: Płynne przełączanie między trybami bez przeładowywania okna.

🛠️ Rozwiązania Techniczne

Projekt został stworzony z myślą o czystej architekturze i dobrych praktykach Programowania Obiektowego.

1. Architektura GUI (QStackedWidget)

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.

2. Modularność i OOP

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.

3. Asynchroniczność i Czas (QTimer)

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.

4. Custom Styling (CSS)

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).

📂 Struktura Projektu

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

🔜 Plany rozwoju (Roadmap)

  • 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.

💡 Inspiracja i Źródła

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.

About

Desktopowa aplikacja Zegara i Stopera napisana w Pythonie (PyQt5).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages