Hier habe ich noch den neu geschriebenen Wecker mit allen Funktionen wie er sie vorher auch hatte. Ich habe eigentlich alle Hinweise von euch umgesetzt. Falls ihr Lust habt könnt ihr ja nochmal drüber schauen. Ansonsten empfinde ich es immer als sehr schwer selber rauszufinden, wo man noch etwas anders machen könnte und vor allem wie.
Code: Alles auswählen
import tkinter as tk
from playsound import playsound
from time import strftime, sleep
from functools import partial
class Alarm:
def __init__(self, time, state):
self.time = time
self.state = state
def change_state(self, state):
self.state = state
def save(input_widget, database, main_listbox, window):
alarm_time = input_widget.get()
new_alarm = Alarm(alarm_time, True)
input_widget.delete(0, tk.END)
database.append(new_alarm)
listbox_database = main_listbox.get(0, tk.END)
if alarm_time not in listbox_database:
main_listbox.insert(tk.END, alarm_time)
new_listbox_database = main_listbox.get(0, tk.END)
index = new_listbox_database.index(alarm_time)
main_listbox.itemconfig(index, bg='green')
timer(database, window, main_listbox)
def timer(database, window, main_listbox):
for idx, alarm in enumerate(database):
if alarm.state and alarm.time == strftime("%H:%M"):
playsound("alarm.mp3")
alarm.state = False
main_listbox.itemconfig(idx, bg='red')
window.after(500, timer, database, window, main_listbox)
def change_state(main_listbox, database):
if database:
listbox_selection = main_listbox.curselection()
selected_alarm_index = listbox_selection[0]
selected_timer = main_listbox.get(selected_alarm_index)
for idx, alarm in enumerate(database):
if alarm.time == selected_timer and alarm.state:
alarm.state = False
main_listbox.itemconfig(idx, bg='red')
elif alarm.time == selected_timer and not alarm.state:
alarm.state = True
main_listbox.itemconfig(idx, bg='green')
main_listbox.select_clear(0, 'end')
def delete_alarm(main_listbox, database):
if database:
listbox_selection = main_listbox.curselection()
selected_alarm_index = listbox_selection[0]
selected_timer = main_listbox.get(selected_alarm_index)
for idx, alarm in enumerate(database):
if alarm.time == selected_timer:
del database[idx]
main_listbox.delete(idx)
main_listbox.select_clear(0, 'end')
def main():
database = []
window = tk.Tk()
window.title("ALARM CLOCK")
top_frame = tk.Frame(window)
top_frame.pack()
bottom_frame = tk.Frame(window)
bottom_frame.pack(side=tk.BOTTOM)
middle_frame = tk.Frame(window)
middle_frame.pack(side=tk.BOTTOM)
tk.Label(top_frame, text="Alarm (hh:mm)").pack()
input_widget = tk.Entry(top_frame)
input_widget.pack()
main_listbox = tk.Listbox(middle_frame, height=5)
main_listbox.pack()
button = tk.Button(window, text="Save", command=partial(save, input_widget, database, main_listbox, window))
button.pack()
button_1 = tk.Button(bottom_frame, text="ON/OFF", command=partial(change_state, main_listbox, database))
button_1.pack(side=tk.LEFT)
button_2 = tk.Button(bottom_frame, text="DELET", command=partial(delete_alarm, main_listbox, database))
button_2.pack(side=tk.LEFT)
window.mainloop()
main()