#!/usr/bin/env python3 import os import tkinter as tk from tkinter import ttk, StringVar from tkinter.messagebox import showinfo from datetime import datetime from PIL import Image, ImageTk now = datetime.now() YEAR = now.strftime("%Y") 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 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"): pass else: with open(journal_filename_path, "a"): pass journal = tk.Tk() journal.attributes('-alpha', 0.5) # # set window to fullscreen (dependend of the actual screensize) and fill with a background image image_location = 'background.jpg' width = journal.winfo_screenwidth() height = journal.winfo_screenheight() journal.geometry("%dx%d" % (width, height)) journal.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.place(relx=0.5, rely=0.5, anchor='center') # # store name and message name = tk.StringVar() message = tk.StringVar() # # Main Window journal = ttk.Frame(journal) 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_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: 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) def send_button_clicked(): with open(journal_filename_path, "a") 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") # # TODO: Checken, on name leer ist und entsprechend im Output reagieren def save_and_quit_button_clicked(): with open(journal_filename_path, "a") 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") journal_of_the_day.write("Speichern und Beenden von: " + name.get() + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") journal.quit() # # Send Button button_send = ttk.Button( journal, text = "Abschicken", command = lambda: send_button_clicked() ) 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() ) button_quit.grid(sticky = 'e', column = 0, row = 3, ipady = 8, padx = 5, pady = 5) journal.mainloop()