User: улучши UI у данного кода: import tkinter as tk
from tkinter import messagebox
import random
import string

# Создание главного окна
root = tk.Tk()
root.title("Генератор паролей")
root.geometry("400x400")
root.resizable(False, False)

# Функция для генерации пароля
def generate_password():
    length = password_length.get()
    chars = ''
    if include_uppercase.get():
        chars += string.ascii_uppercase
    if include_lowercase.get():
        chars += string.ascii_lowercase
    if include_digits.get():
        chars += string.digits
    if include_symbols.get():
        chars += string.punctuation
    if chars == '':
        messagebox.showwarning("Ошибка", "Выберите хотя бы один набор символов!")
        return
    password = ''.join(random.choice(chars) for _ in range(length))
    password_entry.delete(0, tk.END)
    password_entry.insert(0, password)

# Функция для копирования пароля в буфер обмена
def copy_password():
    root.clipboard_clear()
    root.clipboard_append(password_entry.get())
    messagebox.showinfo("Успех", "Пароль скопирован в буфер обмена!")

# Переменные для настроек пароля
password_length = tk.IntVar(value=12)
include_uppercase = tk.BooleanVar(value=True)
include_lowercase = tk.BooleanVar(value=True)
include_digits = tk.BooleanVar(value=True)
include_symbols = tk.BooleanVar(value=False)

# Создание фрейма для настроек
settings_frame = tk.LabelFrame(root, text="Настройки пароля", padx=10, pady=10)
settings_frame.pack(pady=10)

# Ползунок для выбора длины пароля
length_label = tk.Label(settings_frame, text="Длина пароля:")
length_label.grid(row=0, column=0, sticky="w")
length_scale = tk.Scale(settings_frame, from_=4, to=32, orient=tk.HORIZONTAL, variable=password_length)
length_scale.grid(row=0, column=1, padx=5, pady=5)

# Флажки для выбора наборов символов
uppercase_check = tk.Checkbutton(settings_frame, text="Включить заглавные буквы", variable=include_uppercase)
uppercase_check.grid(row=1, column=0, columnspan=2, sticky="w")
lowercase_check = tk.Checkbutton(settings_frame, text="Включить строчные буквы", variable=include_lowercase)
lowercase_check.grid(row=2, column=0, columnspan=2, sticky="w")
digits_check = tk.Checkbutton(settings_frame, text="Включить цифры", variable=include_digits)
digits_check.grid(row=3, column=0, columnspan=2, sticky="w")
symbols_check = tk.Checkbutton(settings_frame, text="Включить символы", variable=include_symbols)
symbols_check.grid(row=4, column=0, columnspan=2, sticky="w")

# Кнопка для генерации пароля
generate_button = tk.Button(root, text="Сгенерировать пароль", command=generate_password)
generate_button.pack(pady=10)

# Фрейм для отображения пароля и копирования
password_frame = tk.Frame(root)
password_frame.pack(pady=10)

password_label = tk.Label(password_frame, text="Сгенерированный пароль:")
password_label.pack(side=tk.LEFT)

password_entry = tk.Entry(password_frame, width=24)
password_entry.pack(side=tk.LEFT, padx=5)

copy_button = tk.Button(password_frame, text="Копировать", command=copy_password)
copy_button.pack(side=tk.LEFT)

# Улучшение визуального оформления
root.configure(bg="#f0f0f0")
settings_frame.configure(bg="#f0f0f0")
length_label.configure(bg="#f0f0f0")
uppercase_check.configure(bg="#f0f0f0")
lowercase_check.configure(bg="#f0f0f0")
digits_check.configure(bg="#f0f0f0")
symbols_check.configure(bg="#f0f0f0")
password_label.configure(bg="#f0f0f0")
password_frame.configure(bg="#f0f0f0")

generate_button.configure(bg="#4CAF50", fg="white", font=("Arial", 12, "bold"))
copy_button.configure(bg="#2196F3", fg="white")

# Запуск основного цикла приложения
root.mainloop()