import bcrypt import customtkinter import sqlite3 from tkinter import messagebox

customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme('green')

# Функция для создания базы данных и таблицы пользователей def initialize_database():     conn = sqlite3.connect('users.db')     cursor = conn.cursor()     cursor.execute('''     CREATE TABLE IF NOT EXISTS users (         id INTEGER PRIMARY KEY,         username TEXT NOT NULL,         password TEXT NOT NULL,         role TEXT NOT NULL     )     ''')

    # Хешируем пароли     admin_pass = bcrypt.hashpw('admin_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')     user_pass = bcrypt.hashpw('user_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')

    # Добавляем пользователей, если их еще нет в таблице     cursor.execute(         "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (1, 'Admin', ?, 'admin')", (admin_pass,))     cursor.execute(         "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (2, 'User', ?, 'user')", (user_pass,))

    conn.commit()     conn.close()

# Класс приложения class App(customtkinter.CTk):     def __init__(self):         super().__init__()

        self.geometry('460x370')         self.title('Приложение')

        self.login_entry = customtkinter.CTkEntry(self, placeholder_text="Введите логин")         self.login_entry.pack(pady=10, padx=10)         self.password_entry = customtkinter.CTkEntry(self, placeholder_text="Введите пароль", show="*")         self.password_entry.pack(pady=10, padx=10)         self.button = customtkinter.CTkButton(master=self, text='Войти', command=self.logging)         self.button.pack(pady=10, padx=10)

    def logging(self):         login = self.login_entry.get()         password = self.password_entry.get()

        try:             conn = sqlite3.connect('users.db')             cursor = conn.cursor()             cursor.execute("SELECT password, role FROM users WHERE username = ?", (login,))             result = cursor.fetchone()             conn.close()

            if result:                 stored_password, role = result                 if bcrypt.checkpw(password.encode('utf-8'), stored_password.encode('utf-8')):                     if role == 'admin':                         self.open_admin_window()                     elif role == 'user':                         self.open_user_window()                 else:                     messagebox.showerror("Ошибка", "Неправильный логин или пароль")  # Используем messagebox для отображения ошибки             else:                 messagebox.showerror("Ошибка", "Неправильный логин или пароль")  # Используем messagebox для отображения ошибки         except sqlite3.Error as e:             messagebox.showerror("Ошибка базы данных", f"Произошла ошибка: {e}")

    def open_admin_window(self):         admin_window = customtkinter.CTkToplevel(self)         admin_window.geometry('300x200')         admin_window.title('Администратор')         admin_window.focus_set()

    def open_user_window(self):         user_window = customtkinter.CTkToplevel(self)         user_window.geometry('300x200')         user_window.title('Пользователь')         user_window.focus_set()

if __name__ == '__main__':     initialize_database()     app = App()     app.mainloop()import bcrypt import customtkinter import sqlite3 from tkinter import messagebox

customtkinter.set_appearance_mode('dark') customtkinter.set_default_color_theme('green')

# Функция для создания базы данных и таблицы пользователей def initialize_database():     conn = sqlite3.connect('users.db')     cursor = conn.cursor()     cursor.execute('''     CREATE TABLE IF NOT EXISTS users (         id INTEGER PRIMARY KEY,         username TEXT NOT NULL,         password TEXT NOT NULL,         role TEXT NOT NULL     )     ''')

    # Хешируем пароли     admin_pass = bcrypt.hashpw('admin_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')     user_pass = bcrypt.hashpw('user_pass'.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')

    # Добавляем пользователей, если их еще нет в таблице     cursor.execute(         "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (1, 'Admin', ?, 'admin')", (admin_pass,))     cursor.execute(         "INSERT OR IGNORE INTO users (id, username, password, role) VALUES (2, 'User', ?, 'user')", (user_pass,))

    conn.commit()     conn.close()

# Класс приложения class App(customtkinter.CTk):     def __init__(self):         super().__init__()

        self.geometry('460x370')         self.title('Приложение')

        self.login_entry = customtkinter.CTkEntry(self, placeholder_text="Введите логин")         self.login_entry.pack(pady=10, padx=10)         self.password_entry = customtkinter.CTkEntry(self, placeholder_text="Введите пароль", show="*")         self.password_entry.pack(pady=10, padx=10)         self.button = customtkinter.CTkButton(master=self, text='Войти', command=self.logging)         self.button.pack(pady=10, padx=10)

    def logging(self):         login = self.login_entry.get()         password = self.password_entry.get()

        try:             conn = sqlite3.connect('users.db')             cursor = conn.cursor()             cursor.execute("SELECT password, role FROM users WHERE username = ?", (login,))             result = cursor.fetchone()             conn.close()

            if result:                 stored_password, role = result                 if bcrypt.checkpw(password.encode('utf-8'), stored_password.encode('utf-8')):                     if role == 'admin':                         self.open_admin_window()                     elif role == 'user':                         self.open_user_window()                 else:                     messagebox.showerror("Ошибка", "Неправильный логин или пароль")  # Используем messagebox для отображения ошибки             else:                 messagebox.showerror("Ошибка", "Неправильный логин или пароль")  # Используем messagebox для отображения ошибки         except sqlite3.Error as e:             messagebox.showerror("Ошибка базы данных", f"Произошла ошибка: {e}")

    def open_admin_window(self):         admin_window = customtkinter.CTkToplevel(self)         admin_window.geometry('300x200')         admin_window.title('Администратор')         admin_window.focus_set()

    def open_user_window(self):         user_window = customtkinter.CTkToplevel(self)         user_window.geometry('300x200')         user_window.title('Пользователь')         user_window.focus_set()

if __name__ == '__main__':     initialize_database()     app = App()     app.mainloop()