Ich muss mich mit Python beschäftigen, da ich angefangen habe, mit LLMs zu spielen, und das ist alles Python. Daher würde ich das Python-Gegenstück begrüßen.
hi,
okay ... wie gesagt: stand heute sind die an und abschaltungen von den buttons noch nicht implementiert in dieser version:
stand 08.06.2025 (09:11): jetzt sind im python code alle buttons mit der an und abschaltfunktion richtig wie in der AutoIt version angedacht.
Darüber hinaus habe ich noch einen kleinen Fehler bei der manuellen Berechnung in der 'Reset' Funktion behoben. Jetzt ist es wie es sein sollte:
Python
import os
import sys
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtCore import QTimer, QTime, Qt, QUrl
from PyQt6.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt6.QtMultimedia import QSoundEffect
import datetime
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(341, 766)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.time_clock = QtWidgets.QLabel(parent=self.centralwidget)
self.time_clock.setGeometry(QtCore.QRect(20, 60, 301, 41))
font = QtGui.QFont()
font.setPointSize(28)
font.setBold(True)
self.time_clock.setFont(font)
self.time_clock.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
self.time_clock.setAutoFillBackground(True)
self.time_clock.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.time_clock.setIndent(0)
self.time_clock.setObjectName("time_clock")
self.day_and_date = QtWidgets.QLabel(parent=self.centralwidget)
self.day_and_date.setGeometry(QtCore.QRect(20, 10, 301, 41))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(True)
self.day_and_date.setFont(font)
self.day_and_date.setAutoFillBackground(True)
self.day_and_date.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.day_and_date.setObjectName("day_and_date")
self.start_checkbox = QtWidgets.QCheckBox(parent=self.centralwidget)
self.start_checkbox.setGeometry(QtCore.QRect(15, 140, 51, 20))
self.start_checkbox.setObjectName("start_checkbox")
self.stop_checkbox = QtWidgets.QCheckBox(parent=self.centralwidget)
self.stop_checkbox.setGeometry(QtCore.QRect(280, 140, 51, 20))
self.stop_checkbox.setObjectName("stop_checkbox")
self.Checkbox_Timer = QtWidgets.QLabel(parent=self.centralwidget)
self.Checkbox_Timer.setGeometry(QtCore.QRect(70, 140, 201, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(True)
font.setItalic(True)
self.Checkbox_Timer.setFont(font)
self.Checkbox_Timer.setAutoFillBackground(True)
self.Checkbox_Timer.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.Checkbox_Timer.setObjectName("Checkbox_Timer")
self.manual_start_hours = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_start_hours.setFixedWidth(45)
self.manual_start_hours.setGeometry(QtCore.QRect(130, 180, 31, 22))
self.manual_start_hours.setEditable(False)
self.manual_start_hours.setStyleSheet("QComboBox { text-align: center; }")
self.manual_start_hours.setObjectName("manual_start_hourss")
self.manual_start_minutes = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_start_minutes.setFixedWidth(45)
self.manual_start_minutes.setGeometry(QtCore.QRect(180, 180, 31, 22))
self.manual_start_minutes.setEditable(False)
self.manual_start_minutes.setStyleSheet("QComboBox { text-align: center; }")
self.manual_start_minutes.setObjectName("manual_start_minutes")
self.manual_start_seconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_start_seconds.setFixedWidth(45)
self.manual_start_seconds.setGeometry(QtCore.QRect(230, 180, 31, 22))
self.manual_start_seconds.setEditable(False)
self.manual_start_seconds.setStyleSheet("QComboBox { text-align: center; }")
self.manual_start_seconds.setObjectName("manual_start_seconds")
self.manual_start_milliseconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_start_milliseconds.setFixedWidth(50)
self.manual_start_milliseconds.setGeometry(QtCore.QRect(280, 180, 31, 22))
self.manual_start_milliseconds.setEditable(False)
self.manual_start_milliseconds.setStyleSheet("QComboBox { text-align: center; }")
self.manual_start_milliseconds.setObjectName("manual_start_milliseconds")
self.manual_start = QtWidgets.QLabel(parent=self.centralwidget)
self.manual_start.setGeometry(QtCore.QRect(20, 180, 110, 20))
self.manual_start.setAutoFillBackground(True)
self.manual_start.setObjectName("manual_start")
self.manual_end = QtWidgets.QLabel(parent=self.centralwidget)
self.manual_end.setGeometry(QtCore.QRect(20, 210, 110, 20))
self.manual_end.setAutoFillBackground(True)
self.manual_end.setObjectName("manual_end")
self.manual_end_hours = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_end_hours.setFixedWidth(45)
self.manual_end_hours.setGeometry(QtCore.QRect(130, 210, 31, 22))
self.manual_end_hours.setEditable(False)
self.manual_end_hours.setStyleSheet("QComboBox { text-align: center; }")
self.manual_end_hours.setObjectName("manual_end_hours")
self.manual_end_minutes = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_end_minutes.setFixedWidth(45)
self.manual_end_minutes.setGeometry(QtCore.QRect(180, 210, 31, 22))
self.manual_end_minutes.setEditable(False)
self.manual_end_minutes.setStyleSheet("QComboBox { text-align: center; }")
self.manual_end_minutes.setObjectName("manual_end_minutes")
self.manual_end_seconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_end_seconds.setFixedWidth(45)
self.manual_end_seconds.setGeometry(QtCore.QRect(230, 210, 31, 22))
self.manual_end_seconds.setEditable(False)
self.manual_end_seconds.setStyleSheet("QComboBox { text-align: center; }")
self.manual_end_seconds.setObjectName("manual_end_seconds")
self.manual_end_milliseconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.manual_end_milliseconds.setFixedWidth(50)
self.manual_end_milliseconds.setGeometry(QtCore.QRect(280, 210, 31, 22))
self.manual_end_milliseconds.setEditable(False)
self.manual_end_milliseconds.setStyleSheet("QComboBox { text-align: center; }")
self.manual_end_milliseconds.setObjectName("manual_end_milliseconds")
self.manual_calculator_button = QtWidgets.QPushButton(parent=self.centralwidget)
self.manual_calculator_button.setText("Calculate Time Difference")
self.manual_calculator_button.setGeometry(QtCore.QRect(14, 240, 151, 41))
self.manual_calculator_button.setObjectName("manual_calculator_button")
self.manual_result = QtWidgets.QLabel(parent=self.centralwidget)
self.manual_result.setGeometry(QtCore.QRect(170, 250, 151, 21))
font = QtGui.QFont()
font.setPointSize(18)
font.setBold(True)
font.setItalic(True)
self.manual_result.setFont(font)
self.manual_result.setAutoFillBackground(True)
self.manual_result.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.manual_result.setObjectName("manual_result")
self.start_alarmclock = QtWidgets.QPushButton(parent=self.centralwidget)
self.start_alarmclock.setGeometry(QtCore.QRect(12, 350, 158, 24))
self.start_alarmclock.setObjectName("start_alarmclock")
self.stop_alarmclock = QtWidgets.QPushButton(parent=self.centralwidget)
self.stop_alarmclock.setGeometry(QtCore.QRect(172, 350, 158, 24))
self.stop_alarmclock.setObjectName("stop_alarmclock")
self.alarmclock = QtWidgets.QLabel(parent=self.centralwidget)
self.alarmclock.setGeometry(QtCore.QRect(18, 320, 100, 22))
self.alarmclock.setAutoFillBackground(True)
self.alarmclock.setObjectName("alarmclock")
self.alarmclock_hours = QtWidgets.QComboBox(parent=self.centralwidget)
self.alarmclock_hours.setFixedWidth(45)
self.alarmclock_hours.setGeometry(QtCore.QRect(130, 320, 31, 22))
self.alarmclock_hours.setEditable(False)
self.alarmclock_hours = QtWidgets.QComboBox(parent=self.centralwidget)
self.alarmclock_hours.setFixedWidth(45)
self.alarmclock_hours.setGeometry(QtCore.QRect(130, 320, 31, 22))
self.alarmclock_hours.setEditable(False)
self.alarmclock_hours.setStyleSheet("QComboBox { text-align: center; }")
self.alarmclock_hours.setObjectName("countdown_hours")
self.alarmclock_minutes = QtWidgets.QComboBox(parent=self.centralwidget)
self.alarmclock_minutes.setFixedWidth(45)
self.alarmclock_minutes.setGeometry(QtCore.QRect(180, 320, 31, 22))
self.alarmclock_minutes.setEditable(False)
self.alarmclock_minutes.setStyleSheet("QComboBox { text-align: center; }")
self.alarmclock_minutes.setObjectName("countdown_minutes")
self.alarmclock_seconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.alarmclock_seconds.setFixedWidth(45)
self.alarmclock_seconds.setGeometry(QtCore.QRect(230, 320, 31, 22))
self.alarmclock_seconds.setEditable(False)
self.alarmclock_seconds.setStyleSheet("QComboBox { text-align: center; }")
self.alarmclock_seconds.setObjectName("countdown_seconds")
self.alarmclock_milliseconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.alarmclock_milliseconds.setFixedWidth(50)
self.alarmclock_milliseconds.setGeometry(QtCore.QRect(280, 320, 31, 22))
self.alarmclock_milliseconds.setEditable(False)
self.alarmclock_milliseconds.setStyleSheet("QComboBox { text-align: center; }")
self.alarmclock_milliseconds.setObjectName("countdown_milliseconds")
self.stopwatch = QtWidgets.QLabel(parent=self.centralwidget)
self.stopwatch.setGeometry(QtCore.QRect(20, 400, 301, 41))
font = QtGui.QFont()
font.setPointSize(28)
font.setBold(True)
self.stopwatch.setFont(font)
self.stopwatch.setAutoFillBackground(True)
self.stopwatch.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.stopwatch.setObjectName("stopwatch")
self.start_stopwatch = QtWidgets.QPushButton(parent=self.centralwidget)
self.start_stopwatch.setGeometry(QtCore.QRect(12, 460, 76, 24))
self.start_stopwatch.setObjectName("start_stopwatch")
self.stop_stopwatch = QtWidgets.QPushButton(parent=self.centralwidget)
self.stop_stopwatch.setGeometry(QtCore.QRect(92, 460, 76, 24))
self.stop_stopwatch.setObjectName("stop_stopwatch")
self.continue_stopwatch = QtWidgets.QPushButton(parent=self.centralwidget)
self.continue_stopwatch.setGeometry(QtCore.QRect(172, 460, 76, 24))
self.continue_stopwatch.setObjectName("continue_stopwatch")
self.reset_stopwatch = QtWidgets.QPushButton(parent=self.centralwidget)
self.reset_stopwatch.setGeometry(QtCore.QRect(252, 460, 76, 24))
self.reset_stopwatch.setObjectName("reset_stopwatch")
self.start_countdown = QtWidgets.QLabel(parent=self.centralwidget)
self.start_countdown.setGeometry(QtCore.QRect(20, 534, 110, 16))
self.start_countdown.setAutoFillBackground(True)
self.start_countdown.setObjectName("start_countdown")
self.countdown_hours = QtWidgets.QComboBox(parent=self.centralwidget)
self.countdown_hours.setFixedWidth(45)
self.countdown_hours.setGeometry(QtCore.QRect(130, 530, 31, 22))
self.countdown_hours.setEditable(False)
self.countdown_hours.setStyleSheet("QComboBox { text-align: center; }")
self.countdown_hours.setObjectName("countdown_hours")
self.countdown_minutes = QtWidgets.QComboBox(parent=self.centralwidget)
self.countdown_minutes.setFixedWidth(45)
self.countdown_minutes.setGeometry(QtCore.QRect(180, 530, 31, 22))
self.countdown_minutes.setEditable(False)
self.countdown_minutes.setStyleSheet("QComboBox { text-align: center; }")
self.countdown_minutes.setObjectName("countdown_minutes")
self.countdown_seconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.countdown_seconds.setFixedWidth(45)
self.countdown_seconds.setGeometry(QtCore.QRect(230, 530, 31, 22))
self.countdown_seconds.setEditable(False)
self.countdown_seconds.setStyleSheet("QComboBox { text-align: center; }")
self.countdown_seconds.setObjectName("countdown_seconds")
self.countdown_milliseconds = QtWidgets.QComboBox(parent=self.centralwidget)
self.countdown_milliseconds.setFixedWidth(50)
self.countdown_milliseconds.setGeometry(QtCore.QRect(280, 530, 31, 22))
self.countdown_milliseconds.setEditable(False)
self.countdown_milliseconds.setStyleSheet("QComboBox { text-align: center; }")
self.countdown_milliseconds.setObjectName("countdown_milliseconds")
self.countdown = QtWidgets.QLabel(parent=self.centralwidget)
self.countdown.setGeometry(QtCore.QRect(20, 564, 301, 41))
font = QtGui.QFont()
font.setPointSize(28)
font.setBold(True)
self.countdown.setFont(font)
self.countdown.setAutoFillBackground(True)
self.countdown.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.countdown.setObjectName("countdown")
self.exit_button = QtWidgets.QPushButton(parent=self.centralwidget)
self.exit_button.setGeometry(QtCore.QRect(230, 680, 101, 31))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
self.exit_button.setFont(font)
self.exit_button.setObjectName("exit_button")
self.countdown_start = QtWidgets.QPushButton(parent=self.centralwidget)
self.countdown_start.setGeometry(QtCore.QRect(12, 620, 76, 24))
self.countdown_start.setObjectName("countdown_start")
self.countdown_stop = QtWidgets.QPushButton(parent=self.centralwidget)
self.countdown_stop.setGeometry(QtCore.QRect(92, 620, 76, 24))
self.countdown_stop.setObjectName("countdown_stop")
self.countdown_continue = QtWidgets.QPushButton(parent=self.centralwidget)
self.countdown_continue.setGeometry(QtCore.QRect(172, 620, 76, 24))
self.countdown_continue.setObjectName("countdown_continue")
self.countdown_reset = QtWidgets.QPushButton(parent=self.centralwidget)
self.countdown_reset.setGeometry(QtCore.QRect(252, 620, 76, 24))
self.countdown_reset.setObjectName("countdown_reset")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 341, 33))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(parent=self.menubar)
self.menuFile.setObjectName("menuFile")
self.menu = QtWidgets.QMenu(parent=self.menubar)
self.menu.setObjectName("menu")
self.menuInfo = QtWidgets.QMenu(parent=self.menu)
self.menuInfo.setObjectName("menuInfo")
self.menuAbout = QtWidgets.QMenu(parent=self.menu)
self.menuAbout.setObjectName("menuAbout")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionReset = QtGui.QAction(parent=MainWindow)
self.actionReset.setObjectName("actionReset")
self.actionExit = QtGui.QAction(parent=MainWindow)
self.actionExit.setObjectName("actionExit")
self.menuFile.addAction(self.actionReset)
self.menuFile.addAction(self.actionExit)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.menuHelp = QtWidgets.QMenu(self.menubar)
self.menuHelp.setTitle("?")
self.actionInfo = QtGui.QAction("Info", MainWindow)
self.actionAbout = QtGui.QAction("About", MainWindow)
self.menuHelp.addAction(self.actionInfo)
self.menuHelp.addAction(self.actionAbout)
self.menubar.addAction(self.menuHelp.menuAction())
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Clocking It!"))
self.time_clock.setText(_translate("MainWindow", "00:00:00.000"))
current_date = datetime.datetime.now().strftime("%A, %d.%m.%Y")
self.day_and_date.setText(current_date)
self.start_checkbox.setText(_translate("MainWindow", "Start"))
self.stop_checkbox.setText(_translate("MainWindow", "Stop"))
self.Checkbox_Timer.setText(_translate("MainWindow", "00:00:00.000"))
self.manual_start_hours.setCurrentText(_translate("MainWindow", "00"))
self.manual_start_minutes.setCurrentText(_translate("MainWindow", "00"))
self.manual_start_seconds.setCurrentText(_translate("MainWindow", "00"))
self.manual_start_milliseconds.setCurrentText(_translate("MainWindow", "000"))
self.manual_start.setText(_translate("MainWindow", "Start Calculation:"))
self.manual_end.setText(_translate("MainWindow", "End Calculation:"))
self.manual_end_hours.setCurrentText(_translate("MainWindow", "00"))
self.manual_end_minutes.setCurrentText(_translate("MainWindow", "00"))
self.manual_end_seconds.setCurrentText(_translate("MainWindow", "00"))
self.manual_end_milliseconds.setCurrentText(_translate("MainWindow", "000"))
self.manual_calculator_button.setText(_translate("MainWindow", "Calculate Time Difference"))
self.manual_result.setText(_translate("MainWindow", "00:00:00.000"))
self.stopwatch.setText(_translate("MainWindow", "00:00:00.000"))
self.start_stopwatch.setText(_translate("MainWindow", "START"))
self.start_alarmclock.setText(_translate("MainWindow", "ON"))
self.stop_alarmclock.setText(_translate("MainWindow", "OFF"))
self.alarmclock.setText(_translate("MainWindow", "Set Alarm Time:"))
self.stop_stopwatch.setText(_translate("MainWindow", "STOP"))
self.reset_stopwatch.setText(_translate("MainWindow", "RESET"))
self.continue_stopwatch.setText(_translate("MainWindow", "CONTINUE"))
self.start_countdown.setText(_translate("MainWindow", "Set Countdown:"))
self.countdown_hours.setCurrentText(_translate("MainWindow", "00"))
self.countdown_minutes.setCurrentText(_translate("MainWindow", "00"))
self.countdown_seconds.setCurrentText(_translate("MainWindow", "00"))
self.countdown_milliseconds.setCurrentText(_translate("MainWindow", "000"))
self.countdown.setText(_translate("MainWindow", "00:00:00.000"))
self.exit_button.setText(_translate("MainWindow", "EXIT"))
self.countdown_start.setText(_translate("MainWindow", "START"))
self.countdown_stop.setText(_translate("MainWindow", "STOP"))
self.countdown_continue.setText(_translate("MainWindow", "CONTINUE"))
self.countdown_reset.setText(_translate("MainWindow", "RESET"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.menu.setTitle(_translate("MainWindow", "?"))
self.menuInfo.setTitle(_translate("MainWindow", "Info"))
self.menuAbout.setTitle(_translate("MainWindow", "About"))
self.actionReset.setText(_translate("MainWindow", "Reset"))
self.actionExit.setText(_translate("MainWindow", "Exit"))
base_dir = os.path.dirname(os.path.abspath(__file__))
sound_path = os.path.join(base_dir, "alarm.wav")
class TimerApp(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setFixedSize(self.size()) # Prevent resizing
# --- Populate dropdowns for alarm clock, manual time, and countdown ---
self.populate_comboboxes([self.ui.alarmclock_hours], 24)
self.populate_comboboxes([self.ui.alarmclock_minutes, self.ui.alarmclock_seconds], 60)
self.populate_comboboxes([self.ui.alarmclock_milliseconds], 1000, format_string="{:03d}")
self.populate_comboboxes([self.ui.manual_start_hours, self.ui.manual_end_hours], 24)
self.populate_comboboxes([self.ui.manual_start_minutes, self.ui.manual_end_minutes,
self.ui.manual_start_seconds, self.ui.manual_end_seconds], 60)
self.populate_comboboxes([self.ui.manual_start_milliseconds,
self.ui.manual_end_milliseconds], 1000, format_string="{:03d}")
self.populate_comboboxes([self.ui.countdown_hours], 24)
self.populate_comboboxes([self.ui.countdown_minutes, self.ui.countdown_seconds], 60)
self.populate_comboboxes([self.ui.countdown_milliseconds], 1000, format_string="{:03d}")
# --- Alarm Timer ---
self.alarm_timer = QTimer(self)
self.alarm_timer.timeout.connect(self.check_alarm)
self.alarm_active = False
# --- Sound Effect (can be .wav only) ---
self.alarm_sound = QSoundEffect()
self.alarm_sound.setSource(QUrl.fromLocalFile(sound_path))
# --- Connect buttons ---
self.ui.start_alarmclock.clicked.connect(self.enable_alarm)
self.ui.stop_alarmclock.clicked.connect(self.disable_alarm)
# Connect Exit actions
self.ui.actionExit.triggered.connect(self.close_application)
self.ui.exit_button.clicked.connect(self.close_application)
self.ui.actionReset.triggered.connect(self.reset_all)
# Connect Help Menu actions
self.ui.actionInfo.triggered.connect(self.show_info)
self.ui.actionAbout.triggered.connect(self.show_about)
# Setup the rest
self.ui.manual_calculator_button.clicked.connect(self.calculate_manual_time_difference)
self.clock_timer = QTimer(self)
self.clock_timer.timeout.connect(self.update_time)
self.clock_timer.start(100)
self.stopwatch_timer = QTimer(self)
self.stopwatch_timer.timeout.connect(self.update_stopwatch)
self.start_time = None
self.stop_time = None
self.ui.start_checkbox.toggled.connect(self.start_timer)
self.ui.stop_checkbox.toggled.connect(self.stop_timer)
self.ui.start_stopwatch.clicked.connect(self.start_stopwatch_timer)
self.ui.stop_stopwatch.clicked.connect(self.stop_stopwatch_timer)
self.ui.continue_stopwatch.clicked.connect(self.continue_stopwatch_timer)
self.ui.reset_stopwatch.clicked.connect(self.reset_stopwatch_timer)
self.ui.start_alarmclock.setEnabled(True)
self.ui.start_alarmclock.setDisabled(False)
self.ui.stop_alarmclock.setEnabled(False)
self.ui.stop_alarmclock.setDisabled(True)
self.ui.start_stopwatch.setEnabled(True)
self.ui.start_stopwatch.setDisabled(False)
self.ui.stop_stopwatch.setEnabled(False)
self.ui.stop_stopwatch.setDisabled(True)
self.ui.continue_stopwatch.setEnabled(False)
self.ui.continue_stopwatch.setDisabled(True)
self.ui.reset_stopwatch.setEnabled(False)
self.ui.reset_stopwatch.setDisabled(True)
self.ui.countdown_start.clicked.connect(self.start_countdown_timer)
self.ui.countdown_stop.clicked.connect(self.stop_countdown_timer)
self.ui.countdown_reset.clicked.connect(self.reset_countdown_timer)
self.ui.countdown_continue.clicked.connect(self.continue_countdown_timer)
self.countdown_time = QTime(0, 0, 0, 0)
self.countdown_remaining_time = QTime(0, 0, 0, 0)
self.countdown_timer = QTimer(self)
self.countdown_timer.timeout.connect(self.update_countdown)
self.countdown_running = False
self.countdown_paused = False
self.ui.countdown_start.setEnabled(True)
self.ui.countdown_start.setDisabled(False)
self.ui.countdown_stop.setEnabled(False)
self.ui.countdown_stop.setDisabled(True)
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_continue.setDisabled(True)
self.ui.countdown_reset.setEnabled(False)
self.ui.countdown_reset.setDisabled(True)
def enable_alarm(self):
if not self.alarm_active:
self.alarm_active = True
self.alarm_timer.start(100) # Check every 100 ms
QMessageBox.about(self, "Alarm Clock", "Alarm clock enabled!")
self.ui.start_alarmclock.setEnabled(False)
self.ui.start_alarmclock.setDisabled(True)
self.ui.stop_alarmclock.setEnabled(True)
self.ui.stop_alarmclock.setDisabled(False)
def disable_alarm(self):
if self.alarm_active:
self.alarm_active = False
self.alarm_timer.stop()
QMessageBox.about(self, "Alarm Clock", "Alarm clock disabled!")
self.ui.start_alarmclock.setEnabled(True)
self.ui.start_alarmclock.setDisabled(False)
self.ui.stop_alarmclock.setEnabled(False)
self.ui.stop_alarmclock.setDisabled(True)
def check_alarm(self):
now = datetime.datetime.now()
set_time = datetime.datetime(
now.year,
now.month,
now.day,
int(self.ui.alarmclock_hours.currentText()),
int(self.ui.alarmclock_minutes.currentText()),
int(self.ui.alarmclock_seconds.currentText()),
int(self.ui.alarmclock_milliseconds.currentText()) * 1000 # Convert ms to microseconds
)
if now >= set_time:
self.trigger_alarm()
def trigger_alarm(self):
self.alarm_active = False
self.alarm_timer.stop()
# Play sound
self.alarm_sound.setLoopCount(5) # Optional: play multiple times
self.alarm_sound.play()
# Show message
QMessageBox.about(self, "Alarm Triggered", "The alarm time has been reached!")
def reset_all(self):
print("Full reset triggered")
# === Reset all labels ===
self.ui.time_clock.setText("00:00:00.000")
self.ui.stopwatch.setText("00:00:00.000")
self.ui.countdown.setText("00:00:00.000")
self.ui.Checkbox_Timer.setText("00:00:00.00")
self.ui.manual_result.setText("00:00:00.000")
# === Stop and reset timers ===
self.stopwatch_timer.stop()
self.countdown_timer.stop()
# === Reset internal timer states ===
self.start_time = None
self.stop_time = None
self.countdown_time = QTime(0, 0, 0, 0)
self.countdown_remaining_time = QTime(0, 0, 0, 0)
self.countdown_running = False
self.countdown_paused = False
# === Reset checkboxes ===
self.ui.start_checkbox.setChecked(False)
self.ui.stop_checkbox.setChecked(False)
# === Reset stopwatch buttons ===
self.ui.start_stopwatch.setEnabled(True)
self.ui.start_stopwatch.setDisabled(False)
self.ui.stop_stopwatch.setEnabled(False)
self.ui.stop_stopwatch.setDisabled(True)
self.ui.continue_stopwatch.setEnabled(False)
self.ui.continue_stopwatch.setDisabled(True)
self.ui.reset_stopwatch.setEnabled(False)
self.ui.reset_stopwatch.setDisabled(True)
# === Reset countdown buttons ===
self.ui.countdown_start.setEnabled(True)
self.ui.countdown_start.setDisabled(False)
self.ui.countdown_stop.setEnabled(False)
self.ui.countdown_stop.setDisabled(True)
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_continue.setDisabled(True)
self.ui.countdown_reset.setEnabled(False)
self.ui.countdown_reset.setDisabled(True)
# === Reset comboboxes to default index ===
for box in [
self.ui.manual_start_hours, self.ui.manual_start_minutes,
self.ui.manual_start_seconds, self.ui.manual_start_milliseconds,
self.ui.manual_end_hours, self.ui.manual_end_minutes,
self.ui.manual_end_seconds, self.ui.manual_end_milliseconds,
self.ui.countdown_hours, self.ui.countdown_minutes,
self.ui.countdown_seconds, self.ui.countdown_milliseconds
]:
box.setCurrentIndex(0)
# Reset alarm clock combo boxes to "00" or "000"
self.ui.alarmclock_hours.setCurrentText("00")
self.ui.alarmclock_minutes.setCurrentText("00")
self.ui.alarmclock_seconds.setCurrentText("00")
self.ui.alarmclock_milliseconds.setCurrentText("000")
# Stop alarm clock if it was running
self.alarm_timer.stop()
self.alarm_triggered = False
print("Reset complete.")
def close_application(self):
print("Exit triggered") # For debugging
self.close()
def update_time(self):
current_time = datetime.datetime.now()
formatted_time = current_time.strftime("%H:%M:%S")
milliseconds = current_time.microsecond // 1000
formatted_time_with_ms = f"{formatted_time}.{milliseconds:03}"
self.ui.time_clock.setText(formatted_time_with_ms)
def start_timer(self):
if self.ui.start_checkbox.isChecked():
self.start_time = datetime.datetime.now()
print(f"Start time: {self.start_time}")
def stop_timer(self):
if self.ui.stop_checkbox.isChecked() and self.start_time is not None:
self.stop_time = datetime.datetime.now()
print(f"Stop time: {self.stop_time}")
time_difference = self.stop_time - self.start_time
hours, remainder = divmod(time_difference.seconds, 3600)
minutes, seconds = divmod(remainder, 60)
milliseconds = time_difference.microseconds // 1000
self.ui.Checkbox_Timer.setText(f"{hours:02}:{minutes:02}:{seconds:02}.{milliseconds:03}")
def populate_comboboxes(self, comboboxes, max_value, format_string="{:02d}"):
for combobox in comboboxes:
for i in range(max_value):
combobox.addItem(format_string.format(i))
def calculate_manual_time_difference(self):
start_time = QTime(
int(self.ui.manual_start_hours.currentText()),
int(self.ui.manual_start_minutes.currentText()),
int(self.ui.manual_start_seconds.currentText()),
int(self.ui.manual_start_milliseconds.currentText())
)
end_time = QTime(
int(self.ui.manual_end_hours.currentText()),
int(self.ui.manual_end_minutes.currentText()),
int(self.ui.manual_end_seconds.currentText()),
int(self.ui.manual_end_milliseconds.currentText())
)
print(f"Start Time: {start_time.toString()}")
print(f"End Time: {end_time.toString()}")
time_diff = start_time.msecsTo(end_time)
hours = time_diff // (1000 * 3600)
minutes = (time_diff % (1000 * 3600)) // (1000 * 60)
seconds = (time_diff % (1000 * 60)) // 1000
milliseconds = time_diff % 1000
self.ui.manual_result.setText(f"{hours:02}:{minutes:02}:{seconds:02}.{milliseconds:03}")
def start_stopwatch_timer(self):
self.stopwatch_timer.start(10)
self.ui.start_stopwatch.setEnabled(False)
self.ui.start_stopwatch.setDisabled(True)
self.ui.stop_stopwatch.setEnabled(True)
self.ui.stop_stopwatch.setDisabled(False)
self.ui.continue_stopwatch.setEnabled(False)
self.ui.continue_stopwatch.setDisabled(True)
self.ui.reset_stopwatch.setEnabled(False)
self.ui.reset_stopwatch.setDisabled(True)
def stop_stopwatch_timer(self):
self.stopwatch_timer.stop()
self.ui.start_stopwatch.setEnabled(False)
self.ui.start_stopwatch.setDisabled(True)
self.ui.stop_stopwatch.setEnabled(False)
self.ui.stop_stopwatch.setDisabled(True)
self.ui.continue_stopwatch.setEnabled(True)
self.ui.continue_stopwatch.setDisabled(False)
self.ui.reset_stopwatch.setEnabled(True)
self.ui.reset_stopwatch.setDisabled(False)
def continue_stopwatch_timer(self):
self.stopwatch_timer.start(10)
self.ui.start_stopwatch.setEnabled(False)
self.ui.start_stopwatch.setDisabled(True)
self.ui.stop_stopwatch.setEnabled(True)
self.ui.stop_stopwatch.setDisabled(False)
self.ui.continue_stopwatch.setEnabled(True)
self.ui.continue_stopwatch.setDisabled(False)
self.ui.reset_stopwatch.setEnabled(False)
self.ui.reset_stopwatch.setDisabled(True)
def reset_stopwatch_timer(self):
self.stopwatch_timer.stop()
self.ui.stopwatch.setText("00:00:00.000")
self.ui.start_stopwatch.setEnabled(True)
self.ui.start_stopwatch.setDisabled(False)
self.ui.stop_stopwatch.setEnabled(False)
self.ui.stop_stopwatch.setDisabled(True)
self.ui.continue_stopwatch.setEnabled(False)
self.ui.continue_stopwatch.setDisabled(True)
self.ui.reset_stopwatch.setEnabled(False)
self.ui.reset_stopwatch.setDisabled(True)
def update_stopwatch(self):
time_text = self.ui.stopwatch.text()
current_time = QTime.fromString(time_text, "hh:mm:ss.zzz")
new_time = current_time.addMSecs(10)
self.ui.stopwatch.setText(new_time.toString("hh:mm:ss.zzz"))
def start_countdown_timer(self):
if self.countdown_running:
return
if self.countdown_time == QTime(0, 0, 0, 0):
try:
hours = int(self.ui.countdown_hours.currentText())
minutes = int(self.ui.countdown_minutes.currentText())
seconds = int(self.ui.countdown_seconds.currentText())
milliseconds = int(self.ui.countdown_milliseconds.currentText())
self.countdown_time = QTime(hours, minutes, seconds, milliseconds)
except ValueError:
print("Invalid values in countdown dropdowns.")
return
self.countdown_remaining_time = self.countdown_time
self.countdown_timer.start(100)
self.countdown_running = True
self.countdown_paused = False
self.ui.countdown_start.setEnabled(False)
self.ui.countdown_stop.setEnabled(True)
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_reset.setEnabled(True)
def stop_countdown_timer(self):
if not self.countdown_running:
return
self.countdown_remaining_time = self.countdown_time
self.countdown_timer.stop()
self.countdown_running = False
self.countdown_paused = True
self.ui.countdown_start.setEnabled(False)
self.ui.countdown_stop.setEnabled(False)
self.ui.countdown_continue.setEnabled(True)
self.ui.countdown_reset.setEnabled(True)
def reset_countdown_timer(self):
self.countdown_timer.stop()
self.countdown_time = QTime(0, 0, 0, 0)
self.countdown_remaining_time = QTime(0, 0, 0, 0)
self.countdown_running = False
self.countdown_paused = False
self.ui.countdown.setText("00:00:00.000")
self.ui.countdown_start.setEnabled(True)
self.ui.countdown_stop.setEnabled(False)
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_reset.setEnabled(False)
def continue_countdown_timer(self):
if not self.countdown_paused:
return
self.countdown_timer.start(100)
self.countdown_running = True
self.countdown_paused = False
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_stop.setEnabled(True)
def update_countdown(self):
self.countdown_remaining_time = self.countdown_remaining_time.addMSecs(-100)
self.ui.countdown.setText(self.countdown_remaining_time.toString("hh:mm:ss.zzz"))
if self.countdown_remaining_time == QTime(0, 0, 0, 0):
self.countdown_timer.stop()
self.countdown_running = False
self.ui.countdown.setText("00:00:00.000")
QMessageBox.about(self, "Countdown", "The countdown has finished!")
self.ui.countdown_start.setEnabled(True)
self.ui.countdown_stop.setEnabled(False)
self.ui.countdown_continue.setEnabled(False)
self.ui.countdown_reset.setEnabled(False)
print("Countdown finished!")
def show_info(self):
msg = QMessageBox(self)
msg.setWindowTitle("About")
msg.setTextFormat(Qt.TextFormat.RichText)
msg.setText("""
<b>Clocking It!</b><br><br>
<b>like no other clock software!<br><br>
It's Key features include:<br>
\u2022 Day and Date Display<br>
\u2022 System Clock incl. Milliseconds<br>
\u2022 Start and Stop markers to calculate time<br>
\u2022 Manual Time Calculation (Dropdowns)<br>
\u2022 An Alarmclock function<br>
\u2022 A Stopwatch function<br>
\u2022 A Countdown Timer (Stop & Contiue)<br><br>
All built in a slim GUI with a functional<br>
design to suit your needs. Clock On!
""")
msg.exec()
def show_about(self):
msg = QMessageBox(self)
msg.setWindowTitle("About")
msg.setTextFormat(Qt.TextFormat.RichText)
msg.setText("""
<b>Clocking It!</b><br><br>
<b>Clocking It!</b> - written using the Thonny<br>
Editor and Python Scripting Language.<br>
""")
msg.exec()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = TimerApp()
window.show()
sys.exit(app.exec())
Alles anzeigen
da hat man ggf. einen schoenen kleinen vergleich.
gruss
bankesbusters
/// EDIT: fehlerkorrektur bzw. neuer python programcode mit beinhalteter fehlerkorrektur und featureerweiterung!