Introduction
Basic Widgets
Toplevel Widgets
Geometry Management
Binding Functions
Working with Images in Tkinter
Tkinter Advance
Applications and Projects
Creating a simple cryptography GUI using Tkinter can be both educational and practical. For this tutorial, let's build an app that uses the Fernet symmetric encryption provided by the cryptography
library to encrypt and decrypt text.
pip install cryptography
Set up the GUI with Tkinter:
import tkinter as tk from tkinter import ttk, messagebox from cryptography.fernet import Fernet
root = tk.Tk() root.title("Cryptography GUI") root.geometry("400x400")
Generate and Store the Key:
For simplicity, we'll generate a key on startup and store it in memory. In a real-world scenario, you'd want to securely store this key.
key = Fernet.generate_key() cipher = Fernet(key)
Functions for Encryption and Decryption:
def encrypt_text(): plaintext = input_text.get(1.0, "end-1c") # Fetch input text ciphertext = cipher.encrypt(plaintext.encode()) output_text.delete(1.0, tk.END) # Clear existing output output_text.insert(tk.END, ciphertext.decode()) # Display encrypted text def decrypt_text(): ciphertext = input_text.get(1.0, "end-1c") # Fetch input text try: decrypted_text = cipher.decrypt(ciphertext.encode()).decode() output_text.delete(1.0, tk.END) # Clear existing output output_text.insert(tk.END, decrypted_text) # Display decrypted text except: messagebox.showerror("Error", "Invalid ciphertext")
GUI Layout:
Add input area, buttons, and output area.
# Input text area ttk.Label(root, text="Enter your text:").pack(pady=10) input_text = tk.Text(root, height=5, width=40) input_text.pack(pady=10) # Encrypt and Decrypt buttons encrypt_btn = ttk.Button(root, text="Encrypt", command=encrypt_text) encrypt_btn.pack(pady=5) decrypt_btn = ttk.Button(root, text="Decrypt", command=decrypt_text) decrypt_btn.pack(pady=5) # Output text area ttk.Label(root, text="Output:").pack(pady=10) output_text = tk.Text(root, height=5, width=40) output_text.pack(pady=10)
Run the main loop:
root.mainloop()
With the provided code, you can input text, click "Encrypt" to encrypt the text, and then click "Decrypt" to decrypt the encrypted text. Remember, this is a basic demonstration. In a real-world scenario, key management and error handling would be much more comprehensive.
Creating a secure GUI with Python cryptography:
import tkinter as tk from cryptography.fernet import Fernet def encrypt_message(): key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_message = cipher_suite.encrypt(message_var.get().encode()) result_var.set(f"Encrypted Message: {encrypted_message}") def decrypt_message(): cipher_suite = Fernet(key_var.get()) decrypted_message = cipher_suite.decrypt(encrypted_message_var.get().encode()) result_var.set(f"Decrypted Message: {decrypted_message.decode()}") root = tk.Tk() root.title("Secure GUI with Python Cryptography") message_label = tk.Label(root, text="Enter Message:") message_label.pack(pady=10) message_var = tk.StringVar() message_entry = tk.Entry(root, textvariable=message_var) message_entry.pack(pady=10) encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_message) encrypt_button.pack(pady=5) encrypted_message_label = tk.Label(root, text="Encrypted Message:") encrypted_message_label.pack(pady=10) encrypted_message_var = tk.StringVar() encrypted_message_entry = tk.Entry(root, textvariable=encrypted_message_var, state="readonly") encrypted_message_entry.pack(pady=10) key_label = tk.Label(root, text="Enter Key:") key_label.pack(pady=10) key_var = tk.StringVar() key_entry = tk.Entry(root, textvariable=key_var) key_entry.pack(pady=10) decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_message) decrypt_button.pack(pady=5) result_var = tk.StringVar() result_label = tk.Label(root, textvariable=result_var) result_label.pack(pady=10) root.mainloop()
Tkinter encryption and decryption example:
import tkinter as tk from cryptography.fernet import Fernet def encrypt_message(): key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_message = cipher_suite.encrypt(message_var.get().encode()) result_var.set(f"Encrypted Message: {encrypted_message}") def decrypt_message(): cipher_suite = Fernet(key_var.get()) decrypted_message = cipher_suite.decrypt(encrypted_message_var.get().encode()) result_var.set(f"Decrypted Message: {decrypted_message.decode()}") root = tk.Tk() root.title("Tkinter Encryption and Decryption Example") message_label = tk.Label(root, text="Enter Message:") message_label.pack(pady=10) message_var = tk.StringVar() message_entry = tk.Entry(root, textvariable=message_var) message_entry.pack(pady=10) encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_message) encrypt_button.pack(pady=5) encrypted_message_label = tk.Label(root, text="Encrypted Message:") encrypted_message_label.pack(pady=10) encrypted_message_var = tk.StringVar() encrypted_message_entry = tk.Entry(root, textvariable=encrypted_message_var, state="readonly") encrypted_message_entry.pack(pady=10) key_label = tk.Label(root, text="Enter Key:") key_label.pack(pady=10) key_var = tk.StringVar() key_entry = tk.Entry(root, textvariable=key_var) key_entry.pack(pady=10) decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_message) decrypt_button.pack(pady=5) result_var = tk.StringVar() result_label = tk.Label(root, textvariable=result_var) result_label.pack(pady=10) root.mainloop()
Python cryptography library GUI application:
import tkinter as tk from cryptography.fernet import Fernet def encrypt_message(): key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_message = cipher_suite.encrypt(message_var.get().encode()) result_var.set(f"Encrypted Message: {encrypted_message}") def decrypt_message(): cipher_suite = Fernet(key_var.get()) decrypted_message = cipher_suite.decrypt(encrypted_message_var.get().encode()) result_var.set(f"Decrypted Message: {decrypted_message.decode()}") root = tk.Tk() root.title("Python Cryptography Library GUI Application") message_label = tk.Label(root, text="Enter Message:") message_label.pack(pady=10) message_var = tk.StringVar() message_entry = tk.Entry(root, textvariable=message_var) message_entry.pack(pady=10) encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_message) encrypt_button.pack(pady=5) encrypted_message_label = tk.Label(root, text="Encrypted Message:") encrypted_message_label.pack(pady=10) encrypted_message_var = tk.StringVar() encrypted_message_entry = tk.Entry(root, textvariable=encrypted_message_var, state="readonly") encrypted_message_entry.pack(pady=10) key_label = tk.Label(root, text="Enter Key:") key_label.pack(pady=10) key_var = tk.StringVar() key_entry = tk.Entry(root, textvariable=key_var) key_entry.pack(pady=10) decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_message) decrypt_button.pack(pady=5) result_var = tk.StringVar() result_label = tk.Label(root, textvariable=result_var) result_label.pack(pady=10) root.mainloop()
Building a cryptographic tool with Tkinter:
import tkinter as tk from cryptography.fernet import Fernet def encrypt_message(): key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_message = cipher_suite.encrypt(message_var.get().encode()) result_var.set(f"Encrypted Message: {encrypted_message}") def decrypt_message(): cipher_suite = Fernet(key_var.get()) decrypted_message = cipher_suite.decrypt(encrypted_message_var.get().encode()) result_var.set(f"Decrypted Message: {decrypted_message.decode()}") root = tk.Tk() root.title("Cryptographic Tool with Tkinter") message_label = tk.Label(root, text="Enter Message:") message_label.pack(pady=10) message_var = tk.StringVar() message_entry = tk.Entry(root, textvariable=message_var) message_entry.pack(pady=10) encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_message) encrypt_button.pack(pady=5) encrypted_message_label = tk.Label(root, text="Encrypted Message:") encrypted_message_label.pack(pady=10) encrypted_message_var = tk.StringVar() encrypted_message_entry = tk.Entry(root, textvariable=encrypted_message_var, state="readonly") encrypted_message_entry.pack(pady=10) key_label = tk.Label(root, text="Enter Key:") key_label.pack(pady=10) key_var = tk.StringVar() key_entry = tk.Entry(root, textvariable=key_var) key_entry.pack(pady=10) decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_message) decrypt_button.pack(pady=5) result_var = tk.StringVar() result_label = tk.Label(root, textvariable=result_var) result_label.pack(pady=10) root.mainloop()
Secure messaging GUI with Python Tkinter:
import tkinter as tk from cryptography.fernet import Fernet def encrypt_message(): key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_message = cipher_suite.encrypt(message_var.get().encode()) result_var.set(f"Encrypted Message: {encrypted_message}") def decrypt_message(): cipher_suite = Fernet(key_var.get()) decrypted_message = cipher_suite.decrypt(encrypted_message_var.get().encode()) result_var.set(f"Decrypted Message: {decrypted_message.decode()}") root = tk.Tk() root.title("Secure Messaging GUI with Tkinter") message_label = tk.Label(root, text="Enter Message:") message_label.pack(pady=10) message_var = tk.StringVar() message_entry = tk.Entry(root, textvariable=message_var) message_entry.pack(pady=10) encrypt_button = tk.Button(root, text="Encrypt", command=encrypt_message) encrypt_button.pack(pady=5) encrypted_message_label = tk.Label(root, text="Encrypted Message:") encrypted_message_label.pack(pady=10) encrypted_message_var = tk.StringVar() encrypted_message_entry = tk.Entry(root, textvariable=encrypted_message_var, state="readonly") encrypted_message_entry.pack(pady=10) key_label = tk.Label(root, text="Enter Key:") key_label.pack(pady=10) key_var = tk.StringVar() key_entry = tk.Entry(root, textvariable=key_var) key_entry.pack(pady=10) decrypt_button = tk.Button(root, text="Decrypt", command=decrypt_message) decrypt_button.pack(pady=5) result_var = tk.StringVar() result_label = tk.Label(root, textvariable=result_var) result_label.pack(pady=10) root.mainloop()