From 1f1152ebd15bfa7b63357669c1942ab2e131bdbc Mon Sep 17 00:00:00 2001 From: Jules Date: Wed, 13 Aug 2025 10:02:44 +0200 Subject: [PATCH] added a check for maximim length of entry (1000 characters) --- journal.py | 117 ++++++++++++++++++++++++++--------------------------- 1 file changed, 57 insertions(+), 60 deletions(-) diff --git a/journal.py b/journal.py index 2386cd5..18805c9 100755 --- a/journal.py +++ b/journal.py @@ -3,7 +3,7 @@ import os import tkinter as tk from tkinter import ttk, StringVar -from tkinter.messagebox import showinfo +from tkinter.messagebox import showinfo, showwarning from datetime import datetime from PIL import Image, ImageTk @@ -13,86 +13,84 @@ MONTH = now.strftime("%m") DAY = now.strftime("%d") journal_filename = "%s-%s-%s-Journal.txt" % (YEAR, MONTH, DAY) -# -# determine OS to correctly save journal file and to switch back to one-branch development for convenience -if os.name == 'posix': - journal_filename_path = "./%s" % journal_filename +# Determine journal file path +journal_filename_path = "./%s" % journal_filename -if os.name == 'nt': - journal_filename_path = "$Env:AppData/%s" % journal_filename - -if not os.path.exists(journal_filename_path): - with open(journal_filename_path, "w"): +# Create the file if it doesn't exist +if os.path.exists(journal_filename_path): + with open(journal_filename_path, "a", encoding="utf-8"): pass else: - with open(journal_filename_path, "a"): + with open(journal_filename_path, "w", encoding="utf-8"): pass -journal = tk.Tk() -journal.attributes('-alpha', 0.5) +# Initialize main window +journal_root = tk.Tk() -# -# set window to fullscreen (dependend of the actual screensize) and fill with a background image +# Set fullscreen dimensions and background image image_location = 'background.jpg' -width = journal.winfo_screenwidth() -height = journal.winfo_screenheight() -journal.geometry("%dx%d" % (width, height)) -journal.title("Ameland Kinderjournal") +width = journal_root.winfo_screenwidth() +height = journal_root.winfo_screenheight() +journal_root.geometry("%dx%d" % (width, height)) +journal_root.title("Ameland Kinderjournal") img = ImageTk.PhotoImage(Image.open(image_location).resize((width, height), Image.ADAPTIVE)) -label = tk.Label(journal, image=img) - -# -# Keep a reference in case this code is put in a function. -label.img = img - -# -# Place label in center of parent. +label = tk.Label(journal_root, image=img) +label.img = img # Keep a reference label.place(relx=0.5, rely=0.5, anchor='center') -# -# store name and message +# Store name and message name = tk.StringVar() message = tk.StringVar() -# -# Main Window -journal = ttk.Frame(journal) +# Create main journal frame +journal = ttk.Frame(journal_root) journal.pack(pady=100, side=tk.TOP) -# -# name -name_label = ttk.Label(journal, text = "Dein Name:") -name_label.grid(sticky = 'w', column = 0, row = 0, padx = 5, pady = 5) -name_entry = ttk.Entry(journal, textvariable = name, width = 70) -name_entry.grid(sticky = 'e', column = 0, row = 0, padx = 90, pady = 5) +# Name input +name_label = ttk.Label(journal, text="Dein Name mit Nachname:") +name_label.grid(sticky='w', column=0, row=0, padx=5, pady=5) +name_entry = ttk.Entry(journal, textvariable=name, width=65) +name_entry.grid(sticky='e', column=0, row=0, padx=100, pady=5) name_entry.focus() -# -# textbox -# TODO: textbox need a scrollbar when applicable -# standard height of the textbox is 40 unless the screen provides more space in which case we will compute -# the textbox_heigth reasonably and relatively to the screensize +# Textbox height textbox_height: int = 40 if height > 1080: textbox_height = height - 1400 -message_label = tk.Label(journal, text = "Deine Nachricht:") -message_label.grid(column = 0, row = 1, sticky = 'w', padx = 5) -message_text = tk.Text(journal, height = textbox_height) -message_text.grid(column = 0, row = 2, padx = 5) +# Message input +message_label = tk.Label(journal, text="Deine Nachricht:") +message_label.grid(column=0, row=1, sticky='w', padx=5) +message_text = tk.Text(journal, height=textbox_height) +message_text.grid(column=0, row=2, padx=5) +# Function to check message length +def is_message_valid(): + current_message = message_text.get("1.0", "end-1c") + if len(current_message) > 1000: + showwarning("Warnung", "Deine Nachricht ist zu lang, bitte beschränke Dich auf 1000 Zeichen") + message_text.focus_set() + return False + return True + +# Send button action def send_button_clicked(): - with open(journal_filename_path, "a") as journal_of_the_day: + if not is_message_valid(): + return + with open(journal_filename_path, "a", encoding="utf-8") as journal_of_the_day: journal_of_the_day.write("Eintrag von: " + name.get() + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") journal_of_the_day.write(message_text.get(1.0, "end-1c") + "\n") journal_of_the_day.write("-----------------\n") message_text.delete('1.0', "end-1c") name.set("") - showinfo(title = "Information", message = "Deine Nachricht wurde gespeichert") + showinfo(title="Information", message="Deine Nachricht wurde gespeichert") +# Save and quit action def save_and_quit_button_clicked(): - with open(journal_filename_path, "a") as journal_of_the_day: + if not is_message_valid(): + return + with open(journal_filename_path, "a", encoding="utf-8") as journal_of_the_day: journal_of_the_day.write(name.get() + "\n") journal_of_the_day.write(message_text.get(1.0, "end-1c") + "\n") journal_of_the_day.write("-----------------\n") @@ -100,24 +98,23 @@ def save_and_quit_button_clicked(): journal_of_the_day.write("Speichern und Beenden von: " + "" + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") else: journal_of_the_day.write("Speichern und Beenden von: " + name.get() + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") - journal.quit() + journal_root.quit() -# # Send Button button_send = ttk.Button( journal, - text = "Abschicken", - command = lambda: send_button_clicked() + text="Speichern und Abschicken", + command=send_button_clicked ) -button_send.grid(sticky = 'w', column = 0, row = 3, ipady = 8, padx = 5, pady = 5) +button_send.grid(sticky='w', column=0, row=3, ipady=8, padx=5, pady=5) -# # Quit Button button_quit = ttk.Button( journal, - text = "Speichern und Beenden", - command = lambda: save_and_quit_button_clicked() + text="Beenden", + command=save_and_quit_button_clicked ) -button_quit.grid(sticky = 'e', column = 0, row = 3, ipady = 8, padx = 5, pady = 5) +button_quit.grid(sticky='e', column=0, row=3, ipady=8, padx=5, pady=5) -journal.mainloop() +# Start application +journal_root.mainloop()