/
Litan
/
REDME
Обзор
Документация
Войти
/
Litan
/
REDME
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
GG.py
306 строк
12 KB
Litan
upload files
22 ноя 2024, 08:16
22 ноя 2024, 08:16
6734aaa
Код
Авторство
О чём код?
import tkinter as tk from tkinter import messagebox, Frame, Listbox, Entry, Button, Label import sqlite3 # Создание таблицы пользователей with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS dan ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, password TEXT, prava TEXT ) """) cursor.execute("INSERT OR IGNORE INTO dan (name, password, prava) VALUES ('Дмитрий', '123', 'Админ')") db.commit() # Создание таблицы задач with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS tacks ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, status TEXT ) """) db.commit() window = tk.Tk() # Переменные для хранения текущего пользователя и его прав current_user = None current_user_rights = None # Подключение к БД пользователей def connect_to_user_db(): with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS dan ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, password TEXT, prava TEXT ) """) db.commit() # Подключение и создание таблицы задач с дополнительным столбцом "status" def connect_to_task_db(): with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS tacks ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, status TEXT ) """) db.commit() # Функция для отображения списка задач def update_task_list(listbox, filter_text=None): with sqlite3.connect('databasee.db') as db: cursor = db.cursor() query = "SELECT id, name, status FROM tacks" if filter_text: query += " WHERE name LIKE ?" cursor.execute(query, ('%' + filter_text + '%',)) else: cursor.execute(query) tasks = cursor.fetchall() listbox.delete(0, tk.END) for task in tasks: listbox.insert(tk.END, f"{task[1]} - {task[2]}") # Функции работы с задачами def add_task(entry, listbox): if current_user_rights != "Админ": messagebox.showerror("Ошибка", "Добавление задач доступно только Администратору!") return task_name = entry.get().strip() if not task_name: messagebox.showerror("Ошибка", "Поле ввода не может быть пустым!") return with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute("INSERT INTO tacks (name, status) VALUES (?, ?)", (task_name, 'Задача ещё не выполняется')) db.commit() update_task_list(listbox) entry.delete(0, tk.END) def delete_task(listbox): if current_user_rights != "Админ": messagebox.showerror("Ошибка", "Удаление задач доступно только Администратору!") return selected = listbox.curselection() if not selected: messagebox.showerror("Ошибка", "Выберите задачу для удаления!") return task_index = selected[0] with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute("SELECT id FROM tacks ORDER BY id") tasks = cursor.fetchall() task_id = tasks[task_index][0] cursor.execute("DELETE FROM tacks WHERE id = ?", (task_id,)) db.commit() update_task_list(listbox) def edit_task(entry, listbox): if current_user_rights != "Админ": messagebox.showerror("Ошибка", "Редактирование задач доступно только Администратору!") return selected = listbox.curselection() if not selected: messagebox.showerror("Ошибка", "Выберите задачу для редактирования!") return task_index = selected[0] new_task_name = entry.get().strip() if not new_task_name: messagebox.showerror("Ошибка", "Поле ввода не может быть пустым!") return with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute("SELECT id FROM tacks ORDER BY id") tasks = cursor.fetchall() task_id = tasks[task_index][0] cursor.execute("UPDATE tacks SET name = ? WHERE id = ?", (new_task_name, task_id)) db.commit() update_task_list(listbox) entry.delete(0, tk.END) # Функция для изменения статуса задачи def change_status(listbox, new_status): selected = listbox.curselection() if not selected: messagebox.showerror("Ошибка", "Выберите задачу для изменения статуса!") return task_index = selected[0] with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute("SELECT id FROM tacks ORDER BY id") tasks = cursor.fetchall() task_id = tasks[task_index][0] cursor.execute("UPDATE tacks SET status = ? WHERE id = ?", (new_status, task_id)) db.commit() update_task_list(listbox) # Функция поиска задач def search_tasks(entry, listbox): search_text = entry.get().strip() update_task_list(listbox, search_text) # Функция регистрации нового пользователя def ClickRegNewUser(): clear_window() Label(window, text="Регистрация нового пользователя", font=("Arial Bold", 20), fg="Red", bg="#F6F6F6").pack(pady=10) Label(window, text="Имя пользователя", font=("Arial Bold", 10), fg="Red", bg="#F6F6F6").pack() reg_name_entry = Entry(window, width=30) reg_name_entry.pack(pady=5) Label(window, text="Пароль", font=("Arial Bold", 10), fg="Red", bg="#F6F6F6").pack() reg_password_entry = Entry(window, width=30, show='*') reg_password_entry.pack(pady=5) Label(window, text="Права (Пользователь/Админ)", font=("Arial Bold", 10), fg="Red", bg="#F6F6F6").pack() reg_rights_entry = Entry(window, width=30) reg_rights_entry.pack(pady=5) def register_user(): username = reg_name_entry.get().strip() password = reg_password_entry.get().strip() rights = reg_rights_entry.get().strip() if not username or not password or not rights: messagebox.showerror("Ошибка", "Все поля обязательны для заполнения!") return with sqlite3.connect('databasee.db') as db: cursor = db.cursor() try: cursor.execute("INSERT INTO dan (name, password, prava) VALUES (?, ?, ?)", (username, password, rights)) db.commit() messagebox.showinfo("Успех", "Пользователь зарегистрирован!") main_page() except sqlite3.IntegrityError: messagebox.showerror("Ошибка", "Имя пользователя уже существует!") Button(window, text="Зарегистрировать", command=register_user, width=20, bg="#FDDB2E").pack(pady=10) Button(window, text="Назад", command=main_page, width=10, bg="#FDDB2E").pack() # Авторизация пользователя def login(): global current_user, current_user_rights username = LoginText.get() password = PaswordText.get() if username and password: with sqlite3.connect('databasee.db') as db: cursor = db.cursor() cursor.execute("SELECT name, password, prava FROM dan WHERE name = ? AND password = ?", (username, password)) user = cursor.fetchone() if user: current_user, _, current_user_rights = user main_page() else: messagebox.showerror("Ошибка", "Неверный логин или пароль!") else: messagebox.showerror("Ошибка", "Введите имя пользователя и пароль!") # Главная страница def main_page(): clear_window() Label(window, text=f"Добро пожаловать, {current_user}!", font=("Arial Bold", 20), fg="Red", bg="#F6F6F6").pack( pady=20) Button(window, text="Задачи", command=open_task_page, width=38, height=2, bg="#FDDB2E").pack(pady=10) if current_user_rights == "Админ": Button(window, text="Регистрация новых пользователей", command=ClickRegNewUser, width=38, height=2, bg="#FDDB2E").pack(pady=10) Button(window, text="Выйти", command=logout, width=10, bg="#FDDB2E").pack(pady=10) # Окно задач def open_task_page(): clear_window() Label(window, text="Список задач", font=("Arial Bold", 20), fg="Red", bg="#F6F6F6").pack(pady=10) frame = Frame(window, bg="#F6F6F6") frame.pack(pady=10) task_entry = Entry(frame, width=30) task_entry.grid(row=0, column=0, padx=5) Button(frame, text="Добавить", command=lambda: add_task(task_entry, task_listbox)).grid(row=0, column=1, padx=5) Button(frame, text="Редактировать", command=lambda: edit_task(task_entry, task_listbox)).grid(row=1, column=0, pady=5) Button(frame, text="Удалить", command=lambda: delete_task(task_listbox)).grid(row=1, column=1, pady=5) Button(frame, text="Завершить задачу", command=lambda: change_status(task_listbox, 'Задача выполнена')).grid(row=2, column=0, pady=5) Button(frame, text="Начать выполнение", command=lambda: change_status(task_listbox, 'Выполняется')).grid(row=2, column=1, pady=5) Button(window, text="Назад", command=main_page, width=10, bg="#FDDB2E").pack() search_entry = Entry(window, width=30) search_entry.pack(pady=10) Button(window, text="Поиск", command=lambda: search_tasks(search_entry, task_listbox)).pack() task_listbox = Listbox(window, width=50, height=15) task_listbox.pack(pady=10) update_task_list(task_listbox) # Очистка окна def clear_window(): for widget in window.winfo_children(): widget.destroy() # Выход из системы def logout(): global current_user, current_user_rights current_user = None current_user_rights = None clear_window() login_window() # Настройка окна def login_window(): clear_window() Label(window, text="Авторизация", font=("Arial Bold", 20), fg="Red", bg="#F6F6F6").place(x=290, y=30) Label(window, text="Имя пользователя", font=("Arial Bold", 10), fg="Red", bg="#F6F6F6").place(x=220, y=75) Label(window, text="Пароль", font=("Arial Bold", 10), fg="Red", bg="#F6F6F6").place(x=220, y=125) global LoginText, PaswordText LoginText = Entry(window, fg='black', width=45) LoginText.place(x=220, y=95) PaswordText = Entry(window, fg='black', width=45, show='*') PaswordText.place(x=220, y=145) Button(window, text="Войти", command=login, width=38, height=2, bg="#FDDB2E").place(x=220, y=185) connect_to_user_db() connect_to_task_db() window.title("Учёт") window.geometry('720x360') window["bg"] = "#F6F6F6" login_window() window.mainloop()