Разработка системы управления задачами на Python с использованием Tkinter
В этой статье мы создадим настольное приложение для управления задачами с использованием библиотеки Tkinter. Приложение будет включать следующие функции:
- Добавление новых задач.
 - Отображение списка задач.
 - Удаление выбранных задач.
 
Все шаги будут сопровождаться объяснениями и комментариями. В конце статьи будет предоставлен полный код приложения.
Шаг 1: Установка окружения
Убедитесь, что у вас установлен Python (версия 3.6 или выше). Tkinter входит в стандартную библиотеку Python, поэтому дополнительных установок не требуется.
Создайте и активируйте виртуальное окружение:
python3 -m venv venv source venv/bin/activate # Linux/MacOS venv\Scripts\activate # Windows
Шаг 2: Импорт библиотек и создание главного окна
Создадим минимальный интерфейс приложения:
import tkinter as tk
from tkinter import messagebox
# Создаем главное окно
root = tk.Tk()
root.title("Task Manager")
root.geometry("400x400")
# Метка заголовка
header_label = tk.Label(root, text="Список задач", font=("Arial", 16))
header_label.pack(pady=10)
# Запуск главного цикла
root.mainloop()
Этот код создает главное окно с заголовком “Список задач”.
Шаг 3: Добавление виджетов для ввода и отображения задач
Теперь добавим поле для ввода задач, кнопку “Добавить” и список для отображения задач.
# Поле для ввода задачи
task_entry = tk.Entry(root, font=("Arial", 12))
task_entry.pack(pady=10, fill=tk.X, padx=10)
# Список задач
task_listbox = tk.Listbox(root, font=("Arial", 12), height=10)
task_listbox.pack(pady=10, fill=tk.BOTH, padx=10, expand=True)
# Функция для добавления задачи
def add_task():
    task = task_entry.get()
    if task.strip():
        task_listbox.insert(tk.END, task)
        task_entry.delete(0, tk.END)
    else:
        messagebox.showwarning("Ошибка", "Введите задачу")
# Кнопка для добавления задачи
add_button = tk.Button(root, text="Добавить задачу", command=add_task, font=("Arial", 12))
add_button.pack(pady=5)
Теперь приложение позволяет добавлять задачи в список.
Шаг 4: Удаление задач
Добавим функциональность для удаления выбранных задач.
# Функция для удаления задачи
def delete_task():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task_listbox.delete(selected_task_index)
    except IndexError:
        messagebox.showwarning("Ошибка", "Выберите задачу для удаления")
# Кнопка для удаления задачи
delete_button = tk.Button(root, text="Удалить задачу", command=delete_task, font=("Arial", 12))
delete_button.pack(pady=5)
Эта функция позволяет удалять выделенные задачи из списка.
Шаг 5: Сохранение и загрузка задач
Для сохранения задач в файл и загрузки их при запуске приложения добавим следующие функции:
import os
# Имя файла для сохранения задач
TASK_FILE = "tasks.txt"
# Функция для сохранения задач
def save_tasks():
    with open(TASK_FILE, "w") as f:
        tasks = task_listbox.get(0, tk.END)
        for task in tasks:
            f.write(task + "\n")
# Функция для загрузки задач
def load_tasks():
    if os.path.exists(TASK_FILE):
        with open(TASK_FILE, "r") as f:
            tasks = f.readlines()
            for task in tasks:
                task_listbox.insert(tk.END, task.strip())
# Загрузка задач при запуске
load_tasks()
# Сохранение задач при закрытии приложения
root.protocol("WM_DELETE_WINDOW", lambda: (save_tasks(), root.destroy()))
Теперь задачи сохраняются в файл tasks.txt и загружаются при следующем запуске.
Шаг 6: Финальный код
import tkinter as tk
from tkinter import messagebox
import os
# Имя файла для сохранения задач
TASK_FILE = "tasks.txt"
# Функция для добавления задачи
def add_task():
    task = task_entry.get()
    if task.strip():
        task_listbox.insert(tk.END, task)
        task_entry.delete(0, tk.END)
    else:
        messagebox.showwarning("Ошибка", "Введите задачу")
# Функция для удаления задачи
def delete_task():
    try:
        selected_task_index = task_listbox.curselection()[0]
        task_listbox.delete(selected_task_index)
    except IndexError:
        messagebox.showwarning("Ошибка", "Выберите задачу для удаления")
# Функция для сохранения задач
def save_tasks():
    with open(TASK_FILE, "w") as f:
        tasks = task_listbox.get(0, tk.END)
        for task in tasks:
            f.write(task + "\n")
# Функция для загрузки задач
def load_tasks():
    if os.path.exists(TASK_FILE):
        with open(TASK_FILE, "r") as f:
            tasks = f.readlines()
            for task in tasks:
                task_listbox.insert(tk.END, task.strip())
# Создаем главное окно
root = tk.Tk()
root.title("Task Manager")
root.geometry("400x400")
# Метка заголовка
header_label = tk.Label(root, text="Список задач", font=("Arial", 16))
header_label.pack(pady=10)
# Поле для ввода задачи
task_entry = tk.Entry(root, font=("Arial", 12))
task_entry.pack(pady=10, fill=tk.X, padx=10)
# Список задач
task_listbox = tk.Listbox(root, font=("Arial", 12), height=10)
task_listbox.pack(pady=10, fill=tk.BOTH, padx=10, expand=True)
# Кнопка для добавления задачи
add_button = tk.Button(root, text="Добавить задачу", command=add_task, font=("Arial", 12))
add_button.pack(pady=5)
# Кнопка для удаления задачи
delete_button = tk.Button(root, text="Удалить задачу", command=delete_task, font=("Arial", 12))
delete_button.pack(pady=5)
# Загрузка задач при запуске
load_tasks()
# Сохранение задач при закрытии приложения
root.protocol("WM_DELETE_WINDOW", lambda: (save_tasks(), root.destroy()))
# Запуск главного цикла
root.mainloop()
Убедитесь, что у вас установлены библиотеки Tk
sudo apt-get install python3-tk
Если вышеуказанная команда не решит проблему, попробуйте установить саму библиотеку Tk:
sudo apt-get install tk
Заключение
Теперь у вас есть функциональное настольное приложение для управления задачами с графическим интерфейсом! Приложение умеет добавлять, удалять, сохранять и загружать задачи. Это базовая версия, которую можно расширить, добавив более сложные функции, такие как сортировка, фильтрация задач или интеграция с базой данных.


                                        
                                        
                                        
