Oct-13-2023, 06:33 PM
(This post was last modified: Oct-13-2023, 07:20 PM by deanhystad.)
Better style demo. Class usage plus real encryption.
import tkinter as tk # Do not use wildcard import from tkinter import ttk from string import ascii_letters class Enigma(tk.Tk): """Super secret message encrytion machine.""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.style = ttk.Style(self) themes = self.style.theme_names() self.style.theme_use(themes[0]) self.plain = tk.StringVar(self, "Message...") self.encrypted = tk.StringVar(self, "") self.theme = tk.StringVar(self, themes[0]) # Root window does not get styled. Fill root window with ttk frame top_frame = ttk.Frame(self) top_frame.pack(expand=True, fill=tk.BOTH) ttk.Label(top_frame, text="Encrypted").grid( row=0, column=0, padx=5, pady=5, sticky="e" ) ttk.Label(top_frame, text="Decrpyted").grid( row=1, column=0, padx=5, pady=5, sticky="e" ) ttk.Label(top_frame, text="Theme").grid( row=2, column=0, padx=5, pady=5, sticky="e" ) ttk.Entry(top_frame, textvariable=self.plain, width=30).grid( row=0, column=1, padx=5, pady=5, sticky="w" ) ttk.Entry(top_frame, textvariable=self.encrypted, width=30).grid( row=1, column=1, padx=5, pady=5, sticky="w" ) combobox = ttk.Combobox(top_frame, textvariable=self.theme, values=themes) combobox.grid(row=2, column=1, padx=5, pady=5, sticky="w") combobox.bind("<<ComboboxSelected>>", self.set_theme) # Want different grid for buttons. button_frame = ttk.Frame(top_frame) button_frame.grid(row=4, column=0, columnspan=2) ttk.Button(button_frame, text="Encrypt", command=self.encrypt).grid( row=0, column=0, padx=5, pady=5 ) ttk.Button(button_frame, text="Decrypt", command=self.decrypt).grid( row=0, column=1, padx=5, pady=5 ) def _secret_cipher(self, message, shift): """Top secret encription technique.""" letters = [] for letter in message: if letter in ascii_letters: index = (ascii_letters.index(letter) + shift) % len(ascii_letters) letters.append(ascii_letters[index]) else: letters.append(letter) return "".join(letters) def encrypt(self): """Apply secret cipher to message.""" self.encrypted.set(self._secret_cipher(self.plain.get(), 4)) def decrypt(self): """Decyphter encripted message.""" self.plain.set(self._secret_cipher(self.encrypted.get(), -4)) def set_theme(self, event): """Change window theme to selected.""" self.style.theme_use(self.theme.get()) Enigma().mainloop()