/
yarik2
/
RandomPasswordGenerator
Обзор
Документация
Войти
/
yarik2
/
RandomPasswordGenerator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
102 строки
4 KB
yarik2
create: data.json, main.py, README.md, .gitignore
04 май 2026, 11:47
Верифицирован
04 май 2026, 11:47
730e981
Код
Авторство
О чём код?
import tkinter as tk from tkinter import ttk, messagebox import json import random import string import os # Константы JSON_FILE = 'history.json' MIN_LENGTH = 6 MAX_LENGTH = 64 # Основное приложение class PasswordGeneratorApp: def __init__(self, root): self.root = root self.root.title('Random Password Generator') self.create_widgets() self.load_history() def create_widgets(self): # Ползунок длины пароля tk.Label(self.root, text='Длина пароля:').grid(row=0, column=0, padx=5, pady=5) self.length_scale = tk.Scale(self.root, from_=6, to=64, orient='horizontal') self.length_scale.set(12) self.length_scale.grid(row=0, column=1, padx=5, pady=5) # Чекбоксы self.var_digits = tk.BooleanVar(value=True) self.var_letters = tk.BooleanVar(value=True) self.var_special = tk.BooleanVar(value=False) tk.Checkbutton(self.root, text='Цифры', variable=self.var_digits).grid(row=1, column=0, sticky='w') tk.Checkbutton(self.root, text='Буквы', variable=self.var_letters).grid(row=1, column=1, sticky='w') tk.Checkbutton(self.root, text='Спецсимволы', variable=self.var_special).grid(row=1, column=2, sticky='w') # Кнопка генерации self.btn_generate = tk.Button(self.root, text='Генерировать', command=self.generate_password) self.btn_generate.grid(row=2, column=0, columnspan=3, pady=10) # Поле для отображения сгенерированного пароля self.output_entry = ttk.Entry(self.root, width=50) self.output_entry.grid(row=3, column=0, columnspan=3, padx=5, pady=5) # Таблица истории self.tree = ttk.Treeview(self.root, columns=('Пароль', 'Длина', 'Время'), show='headings') self.tree.heading('Пароль', text='Пароль') self.tree.heading('Длина', text='Длина') self.tree.heading('Время', text='Время') self.tree.grid(row=4, column=0, columnspan=3, padx=5, pady=5) def load_history(self): self.history = [] if os.path.exists(JSON_FILE): with open(JSON_FILE, 'r') as f: try: self.history = json.load(f) except json.JSONDecodeError: self.history = [] for item in self.history: self.tree.insert('', 'end', values=(item['password'], item['length'], item['time'])) def save_history(self, password, length): from datetime import datetime entry = { 'password': password, 'length': length, 'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S') } self.history.append(entry) with open(JSON_FILE, 'w') as f: json.dump(self.history, f, ensure_ascii=False, indent=4) self.tree.insert('', 'end', values=(password, length, entry['time'])) def generate_password(self): length = self.length_scale.get() if not self.var_digits.get() and not self.var_letters.get() and not self.var_special.get(): messagebox.showerror('Ошибка', 'Выберите хотя бы один тип символов!') return characters = '' if self.var_digits.get(): characters += string.digits if self.var_letters.get(): characters += string.ascii_letters if self.var_special.get(): characters += string.punctuation if not characters: messagebox.showerror('Ошибка', 'Нет символов для создания пароля!') return password = ''.join(random.choice(characters) for _ in range(length)) self.output_entry.delete(0, tk.END) self.output_entry.insert(0, password) self.save_history(password, length) # Запуск приложения if __name__ == '__main__': root = tk.Tk() app = PasswordGeneratorApp(root) root.mainloop()