Created
November 26, 2025 21:56
-
-
Save lovemycodesnippets/f3951d77456769a11ab1aa8a359e9772 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import tkinter as tk | |
| from tkinter import ttk, messagebox | |
| import datetime | |
| class UserInformationApp: | |
| def __init__(self, root): | |
| self.root = root | |
| self.root.title("User Information Collector") | |
| self.root.geometry("500x400") | |
| self.root.resizable(True, True) | |
| # Create main frame | |
| main_frame = ttk.Frame(root, padding="20") | |
| main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S)) | |
| # Configure grid weights | |
| root.columnconfigure(0, weight=1) | |
| root.rowconfigure(0, weight=1) | |
| main_frame.columnconfigure(1, weight=1) | |
| # Title | |
| title_label = ttk.Label(main_frame, text="User Information Collector", | |
| font=("Arial", 16, "bold")) | |
| title_label.grid(row=0, column=0, columnspan=2, pady=(0, 20)) | |
| # Name field | |
| ttk.Label(main_frame, text="Name:").grid(row=1, column=0, sticky=tk.W, pady=5) | |
| self.name_entry = ttk.Entry(main_frame, width=30) | |
| self.name_entry.grid(row=1, column=1, sticky=(tk.W, tk.E), pady=5) | |
| # Age field | |
| ttk.Label(main_frame, text="Age:").grid(row=2, column=0, sticky=tk.W, pady=5) | |
| self.age_entry = ttk.Entry(main_frame, width=30) | |
| self.age_entry.grid(row=2, column=1, sticky=(tk.W, tk.E), pady=5) | |
| # Email field | |
| ttk.Label(main_frame, text="Email:").grid(row=3, column=0, sticky=tk.W, pady=5) | |
| self.email_entry = ttk.Entry(main_frame, width=30) | |
| self.email_entry.grid(row=3, column=1, sticky=(tk.W, tk.E), pady=5) | |
| # Phone field | |
| ttk.Label(main_frame, text="Phone:").grid(row=4, column=0, sticky=tk.W, pady=5) | |
| self.phone_entry = ttk.Entry(main_frame, width=30) | |
| self.phone_entry.grid(row=4, column=1, sticky=(tk.W, tk.E), pady=5) | |
| # Buttons frame | |
| button_frame = ttk.Frame(main_frame) | |
| button_frame.grid(row=5, column=0, columnspan=2, pady=20) | |
| # Save button | |
| save_button = ttk.Button(button_frame, text="Save Information", command=self.save_information) | |
| save_button.pack(side=tk.LEFT, padx=5) | |
| # Clear button | |
| clear_button = ttk.Button(button_frame, text="Clear Fields", command=self.clear_fields) | |
| clear_button.pack(side=tk.LEFT, padx=5) | |
| # Exit button | |
| exit_button = ttk.Button(button_frame, text="Exit", command=root.quit) | |
| exit_button.pack(side=tk.LEFT, padx=5) | |
| # Status bar | |
| self.status_var = tk.StringVar() | |
| self.status_var.set("Ready") | |
| status_bar = ttk.Label(main_frame, textvariable=self.status_var, relief=tk.SUNKEN) | |
| status_bar.grid(row=6, column=0, columnspan=2, sticky=(tk.W, tk.E), pady=(20, 0)) | |
| # Bind Enter key to save | |
| self.root.bind('<Return>', lambda event: self.save_information()) | |
| # Focus on name field | |
| self.name_entry.focus() | |
| def validate_input(self): | |
| """Validate all input fields""" | |
| name = self.name_entry.get().strip() | |
| age = self.age_entry.get().strip() | |
| email = self.email_entry.get().strip() | |
| phone = self.phone_entry.get().strip() | |
| # Check if fields are empty | |
| if not name: | |
| messagebox.showerror("Error", "Name cannot be empty!") | |
| self.name_entry.focus() | |
| return None | |
| if not age: | |
| messagebox.showerror("Error", "Age cannot be empty!") | |
| self.age_entry.focus() | |
| return None | |
| if not email: | |
| messagebox.showerror("Error", "Email cannot be empty!") | |
| self.email_entry.focus() | |
| return None | |
| if not phone: | |
| messagebox.showerror("Error", "Phone cannot be empty!") | |
| self.phone_entry.focus() | |
| return None | |
| # Validate age is a number | |
| try: | |
| age_int = int(age) | |
| if age_int <= 0: | |
| messagebox.showerror("Error", "Age must be a positive number!") | |
| self.age_entry.focus() | |
| return None | |
| except ValueError: | |
| messagebox.showerror("Error", "Age must be a valid number!") | |
| self.age_entry.focus() | |
| return None | |
| # Validate email format | |
| if '@' not in email: | |
| messagebox.showerror("Error", "Please enter a valid email address!") | |
| self.email_entry.focus() | |
| return None | |
| return { | |
| 'name': name, | |
| 'age': age_int, | |
| 'email': email, | |
| 'phone': phone | |
| } | |
| def save_information(self): | |
| """Save user information to file""" | |
| # Validate input | |
| user_data = self.validate_input() | |
| if not user_data: | |
| return | |
| try: | |
| # Create or append to file | |
| with open("user_info.txt", "a") as file: | |
| file.write(f"\n{'='*50}\n") | |
| file.write(f"Date/Time: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") | |
| file.write(f"Name: {user_data['name']}\n") | |
| file.write(f"Age: {user_data['age']}\n") | |
| file.write(f"Email: {user_data['email']}\n") | |
| file.write(f"Phone: {user_data['phone']}\n") | |
| file.write(f"{'='*50}\n") | |
| # Show success message | |
| messagebox.showinfo("Success", "Information saved successfully!") | |
| self.status_var.set("Information saved successfully!") | |
| # Clear fields after successful save | |
| self.clear_fields() | |
| except Exception as e: | |
| messagebox.showerror("Error", f"Failed to save information: {str(e)}") | |
| self.status_var.set(f"Error: {str(e)}") | |
| def clear_fields(self): | |
| """Clear all input fields""" | |
| self.name_entry.delete(0, tk.END) | |
| self.age_entry.delete(0, tk.END) | |
| self.email_entry.delete(0, tk.END) | |
| self.phone_entry.delete(0, tk.END) | |
| self.name_entry.focus() | |
| self.status_var.set("Fields cleared") | |
| def main(): | |
| root = tk.Tk() | |
| app = UserInformationApp(root) | |
| root.mainloop() | |
| if __name__ == "__main__": | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment