Кароч, замутил я тут прогу на Питоне, шоб пароли свои хранить Пихаешь логин, пароль и URL – и оно само в файлик .txt всё кидает с датой, шоб знать, када ты это вписал. Показывает все твои пароли в окошечке, типа список, шоб не рыться в блокноте. Всё в тёмной темке, шоб глаза не вытекли, и кнопка 'Добавить запись' – жми и готово! Без всяких там сложных редактирований – добавил и сиди, любуйся, как питончик файлик заполняет. import tkinter as tk from tkinter import ttk, messagebox, scrolledtext import datetime import os def save_to_file(login, password, url, timestamp): with open("passwords.txt", "a", encoding="utf-8") as file: file.write(f"{timestamp} | {login} | {password} | {url}\n") def load_from_file(): if os.path.exists("passwords.txt"): with open("passwords.txt", "r", encoding="utf-8") as file: return file.readlines() return [] def add_entry(): login = entry_login.get() password = entry_password.get() url = entry_url.get() if login and password and url: timestamp = datetime.datetime.now().strftime("%Y-%m-%d") save_to_file(login, password, url, timestamp) messagebox.showinfo("Успех", "Запись добавлена!") entry_login.delete(0, tk.END) entry_password.delete(0, tk.END) entry_url.delete(0, tk.END) display_entries() else: messagebox.showwarning("Ошибка", "Заполните все поля!") def display_entries(): text_area.delete(1.0, tk.END) entries = load_from_file() for idx, entry in enumerate(entries, 1): text_area.insert(tk.END, f"{idx}. {entry}") root = tk.Tk() root.title("Password Manager") root.geometry("700x500") root.configure(bg="#2b2b2b") style = ttk.Style() style.theme_use("clam") style.configure("TLabel", background="#2b2b2b", foreground="#ffffff", font=("Arial", 10)) style.configure("TButton", background="#4a4a4a", foreground="#ffffff", font=("Arial", 10, "bold"), borderwidth=0) style.map("TButton", background=[("active", "#6a6a6a")]) style.configure("TEntry", fieldbackground="#3c3c3c", foreground="#ffffff", borderwidth=0) title_label = ttk.Label(root, text="Менеджер паролей", font=("Arial", 16, "bold")) title_label.pack(pady=20) input_frame = tk.Frame(root, bg="#2b2b2b") input_frame.pack(pady=10) ttk.Label(input_frame, text="Логин:").grid(row=0, column=0, padx=10, pady=5, sticky="e") entry_login = ttk.Entry(input_frame, width=40) entry_login.grid(row=0, column=1, padx=10, pady=5) ttk.Label(input_frame, text="Пароль:").grid(row=1, column=0, padx=10, pady=5, sticky="e") entry_password = ttk.Entry(input_frame, width=40) entry_password.grid(row=1, column=1, padx=10, pady=5) ttk.Label(input_frame, text="URL сервиса:").grid(row=2, column=0, padx=10, pady=5, sticky="e") entry_url = ttk.Entry(input_frame, width=40) entry_url.grid(row=2, column=1, padx=10, pady=5) add_button = ttk.Button(root, text="Добавить запись", command=add_entry) add_button.pack(pady=10) text_area = scrolledtext.ScrolledText(root, width=80, height=15, bg="#3c3c3c", fg="#ffffff", font=("Arial", 10), borderwidth=0) text_area.pack(padx=20, pady=10) display_entries() root.mainloop() Python import tkinter as tk from tkinter import ttk, messagebox, scrolledtext import datetime import os def save_to_file(login, password, url, timestamp): with open("passwords.txt", "a", encoding="utf-8") as file: file.write(f"{timestamp} | {login} | {password} | {url}\n") def load_from_file(): if os.path.exists("passwords.txt"): with open("passwords.txt", "r", encoding="utf-8") as file: return file.readlines() return [] def add_entry(): login = entry_login.get() password = entry_password.get() url = entry_url.get() if login and password and url: timestamp = datetime.datetime.now().strftime("%Y-%m-%d") save_to_file(login, password, url, timestamp) messagebox.showinfo("Успех", "Запись добавлена!") entry_login.delete(0, tk.END) entry_password.delete(0, tk.END) entry_url.delete(0, tk.END) display_entries() else: messagebox.showwarning("Ошибка", "Заполните все поля!") def display_entries(): text_area.delete(1.0, tk.END) entries = load_from_file() for idx, entry in enumerate(entries, 1): text_area.insert(tk.END, f"{idx}. {entry}") root = tk.Tk() root.title("Password Manager") root.geometry("700x500") root.configure(bg="#2b2b2b") style = ttk.Style() style.theme_use("clam") style.configure("TLabel", background="#2b2b2b", foreground="#ffffff", font=("Arial", 10)) style.configure("TButton", background="#4a4a4a", foreground="#ffffff", font=("Arial", 10, "bold"), borderwidth=0) style.map("TButton", background=[("active", "#6a6a6a")]) style.configure("TEntry", fieldbackground="#3c3c3c", foreground="#ffffff", borderwidth=0) title_label = ttk.Label(root, text="Менеджер паролей", font=("Arial", 16, "bold")) title_label.pack(pady=20) input_frame = tk.Frame(root, bg="#2b2b2b") input_frame.pack(pady=10) ttk.Label(input_frame, text="Логин:").grid(row=0, column=0, padx=10, pady=5, sticky="e") entry_login = ttk.Entry(input_frame, width=40) entry_login.grid(row=0, column=1, padx=10, pady=5) ttk.Label(input_frame, text="Пароль:").grid(row=1, column=0, padx=10, pady=5, sticky="e") entry_password = ttk.Entry(input_frame, width=40) entry_password.grid(row=1, column=1, padx=10, pady=5) ttk.Label(input_frame, text="URL сервиса:").grid(row=2, column=0, padx=10, pady=5, sticky="e") entry_url = ttk.Entry(input_frame, width=40) entry_url.grid(row=2, column=1, padx=10, pady=5) add_button = ttk.Button(root, text="Добавить запись", command=add_entry) add_button.pack(pady=10) text_area = scrolledtext.ScrolledText(root, width=80, height=15, bg="#3c3c3c", fg="#ffffff", font=("Arial", 10), borderwidth=0) text_area.pack(padx=20, pady=10) display_entries() root.mainloop() Простенько, но работает, как твой старый нокиа – без понтов