├── README.md ├── tasks.json ├── Terminal └── ToDoList.py └── Interface Grafica └── ToDoList.py /README.md: -------------------------------------------------------------------------------- 1 | projetinho finalizado 2 | -------------------------------------------------------------------------------- /tasks.json: -------------------------------------------------------------------------------- 1 | [{"text": "peixe", "color": ""}] -------------------------------------------------------------------------------- /Terminal/ToDoList.py: -------------------------------------------------------------------------------- 1 | tarefas = [] # criando um vetor para armazenar as tarefas 2 | 3 | def adicionarTarefa(): 4 | tarefa = input("Adicione a tarefa:") 5 | tarefas.append(tarefa) # adicionará a tarefa digitada no vetor tarefas[] 6 | print(f"Tarefa: {tarefa} adicionada na lista") 7 | 8 | def listarTarefa(): 9 | if not tarefas: 10 | print("Não há tarefas para serem visualizadas") 11 | else: 12 | print("Tarefas: ") 13 | for index, tarefa in enumerate(tarefas): # adicionando um loop de repetição que percorrerá o indíce da tarefa 14 | print(f"Tarefa #{index}. {tarefa}") 15 | 16 | def deletarTarefa(): 17 | listarTarefa() 18 | try: 19 | tarefaDeletada = int(input("Selecione o número para a tarefa ser deletada")) 20 | if tarefaDeletada>=0 and tarefaDeletada < len(tarefas): 21 | tarefas.pop(tarefaDeletada) 22 | print(f"Tarefa {tarefaDeletada} deletada com sucesso") 23 | else: 24 | print(f"Tarefa {tarefaDeletada} não encontrada") 25 | 26 | except: 27 | print("Erro") 28 | 29 | 30 | def editarTarefa(): 31 | listarTarefa() 32 | try: 33 | indiceTarefa = int(input("Selecione o número da tarefa que deseja editar: ")) 34 | if 0 <= indiceTarefa < len(tarefas): 35 | novaDescricao = input("Insira a nova descrição da tarefa: ") 36 | tarefas[indiceTarefa] = novaDescricao 37 | print(f"Tarefa #{indiceTarefa} editada com sucesso") 38 | else: 39 | print("Índice de tarefa inválido") 40 | except ValueError: 41 | print("Por favor, insira um número válido.") 42 | 43 | def marcarComoConcluida(): 44 | listarTarefa() 45 | try: 46 | indiceTarefa = int(input("Selecione o número da tarefa que deseja marcar como concluída: ")) 47 | if 0 <= indiceTarefa < len(tarefas): 48 | tarefas[indiceTarefa] += " (Concluída)" 49 | print(f"Tarefa #{indiceTarefa} marcada como concluída") 50 | else: 51 | print("Índice de tarefa inválido") 52 | except ValueError: 53 | print("Por favor, insira um número válido.") 54 | 55 | print("Gerenciador de Tarefas") 56 | while True: 57 | print("\n") 58 | print("Selecione uma das opções abaixo!") 59 | print("--------------------------------") 60 | print("1. Adicionar Tarefa") 61 | print("2. Deletar Tarefa") 62 | print("3. Listar Tarefa") 63 | print("4. Editar Tarefa") 64 | print("5. Marcar como Concluída") 65 | print("6. Sair") 66 | 67 | escolha = input("Digite sua escolha: ") 68 | 69 | if escolha == "1": 70 | adicionarTarefa() 71 | 72 | elif escolha == "2": 73 | deletarTarefa() 74 | 75 | elif escolha == "3": 76 | listarTarefa() 77 | 78 | elif escolha == "4": 79 | editarTarefa() 80 | 81 | elif escolha == "5": 82 | marcarComoConcluida() 83 | 84 | elif escolha == "6": 85 | break 86 | 87 | else: 88 | print("Opção Inválida") -------------------------------------------------------------------------------- /Interface Grafica/ToDoList.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | from tkinter import ttk, messagebox 3 | from ttkbootstrap import Style 4 | import json 5 | 6 | class TodoListApp(tk.Tk): 7 | def __init__(self): 8 | super().__init__() 9 | 10 | self.title("To do List com GUI") 11 | self.geometry("400x400") # definindo tamanho 12 | style = Style(theme="flatly") # tema 13 | style.configure("Custon.TEntry", foreground="gray") 14 | 15 | # criação dos inputs para adicionar tarefa 16 | self.task_input = ttk.Entry(self, font=( 17 | "TkDefaultFont", 16), width=30, style="Custon.TEntry") 18 | self.task_input.pack(pady=10) 19 | 20 | # placeholder do input 21 | self.task_input.insert(0, "Adicione a tarefa aqui...") 22 | 23 | # quando o usuário clicar em adicionar a tarefa, o campo do input será limpado 24 | self.task_input.bind("", self.limpar_placeholder) 25 | 26 | # restaura o espaço reservado quando o campo de entrada perde o foco 27 | self.task_input.bind("", self.retornar_placeholder) 28 | 29 | # botão de adicionar tarefa 30 | ttk.Button(self, text="Adicione sua Tarefa", command=self.adicionar_tarefa).pack(pady=5) 31 | 32 | # criando uma listbox que mostrará as tarefas que o usuário adicionou 33 | self.task_list = tk.Listbox(self, font=( 34 | "TkDefaultFont", 16), height=10, selectmode=tk.NONE) 35 | self.task_list.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) 36 | 37 | # botão de marcar como concluída e de apagar tarefa 38 | ttk.Button(self, text="Tarefa Concluída", style="success.TButton", 39 | command=self.tarefa_concluida).pack(side=tk.LEFT, padx=10, pady=10) 40 | ttk.Button(self, text="Apagar Tarefa", style="danger.TButton", 41 | command=self.deletar_tarefa).pack(side=tk.RIGHT, padx=10, pady=10) 42 | 43 | # botão dos dados da tarefa 44 | ttk.Button(self, text="Ver Dados", style="info.TButton", 45 | command=self.visualizar_dados).pack(side=tk.BOTTOM, pady=10) 46 | 47 | self.carregar_tarefas() 48 | 49 | # função para visualizar os dados da tarefa 50 | def visualizar_dados(self): 51 | contador_concluidas = 0 52 | contador_total = self.task_list.size() 53 | for i in range(contador_total): 54 | if self.task_list.itemcget(i, "fg") == "green": 55 | contador_concluidas += 1 56 | messagebox.showinfo("Dados da Tarefa", f"Total de Tarefas: {contador_total}\nTarefas Completas: {contador_concluidas}") 57 | 58 | # criando as funções 59 | def adicionar_tarefa(self): 60 | task = self.task_input.get().strip() # remove os espaços em branco em excesso 61 | if task and task != "Adicione a tarefa aqui...": 62 | self.task_list.insert(tk.END, task) 63 | self.task_list.itemconfig(tk.END, fg="orange") 64 | self.ordenar_tarefas() 65 | self.task_input.delete(0, tk.END) 66 | self.retornar_placeholder() 67 | self.salvar_tarefas() 68 | else: 69 | messagebox.showerror("Erro", "Por favor, insira uma tarefa válida.") 70 | 71 | def tarefa_concluida(self): 72 | task_index = self.task_list.curselection() 73 | if task_index: 74 | self.task_list.itemconfig(task_index, fg="green") 75 | self.ordenar_tarefas() 76 | self.salvar_tarefas() 77 | else: 78 | messagebox.showerror("Erro", "Por favor, selecione a tarefa que deseja concluir.") 79 | 80 | def deletar_tarefa(self): 81 | task_index = self.task_list.curselection() 82 | if task_index: 83 | self.task_list.delete(task_index) 84 | self.ordenar_tarefas() 85 | self.salvar_tarefas() 86 | else: 87 | messagebox.showerror("Erro", "Por favor, selecione a tarefa que deseja apagar.") 88 | 89 | def limpar_placeholder(self, event=None): 90 | if self.task_input.get() == "Adicione a tarefa aqui...": 91 | self.task_input.delete(0, tk.END) 92 | self.task_input.configure(style="TEntry") 93 | 94 | def retornar_placeholder(self, event=None): 95 | if not self.task_input.get(): 96 | self.task_input.insert(0, "Adicione a tarefa aqui...") 97 | self.task_input.configure(style="Custom.TEntry") 98 | 99 | def carregar_tarefas(self): 100 | try: 101 | with open("tasks.json", "r") as f: 102 | data = json.load(f) 103 | for task in data: 104 | self.task_list.insert(tk.END, task["text"]) 105 | self.task_list.itemconfig(tk.END, fg=task["color"]) 106 | self.ordenar_tarefas() 107 | except FileNotFoundError: 108 | pass 109 | 110 | def salvar_tarefas(self): 111 | data = [] # criando um vetor para armazenar as tarefas 112 | for i in range(self.task_list.size()): 113 | text = self.task_list.get(i) 114 | color = self.task_list.itemcget(i, "fg") 115 | data.append({"text": text, "color": color}) 116 | with open("tasks.json", "w") as f: 117 | json.dump(data, f) 118 | 119 | def ordenar_tarefas(self): 120 | # obtém todas as tarefas na lista 121 | tasks = [self.task_list.get(idx) for idx in range(self.task_list.size())] 122 | # ordena as tarefas em ordem alfabética 123 | tasks.sort() 124 | # limpa a lista e reinsere as tarefas ordenadas 125 | self.task_list.delete(0, tk.END) 126 | for task in tasks: 127 | self.task_list.insert(tk.END, task) 128 | 129 | if __name__ == '__main__': 130 | app = TodoListApp() 131 | app.mainloop() --------------------------------------------------------------------------------