Vamos organizar o código em classes para torná-lo mais modular e fácil de manter. Criaremos uma classe StudentApp que gerenciará toda a interface e a lógica do aplicativo.
Cadastro de Alunos com Tkinter e organizado em classes
import tkinter as tk
from tkinter import messagebox
import os
class StudentApp:
def __init__(self, janela):
self.janela = janela
self.janela.title("Cadastro de Alunos")
self.janela.geometry("400x400")
# Lista para armazenar os dados dos alunos
self.students = []
# Criando a interface
self.create_widgets()
def create_widgets(self):
# Campos para entrada de dados
tk.Label(self.janela, text="Nome:").pack()
self.name_entry = tk.Entry(self.janela)
self.name_entry.pack()
tk.Label(self.janela, text="Endereço:").pack()
self.address_entry = tk.Entry(self.janela)
self.address_entry.pack()
tk.Label(self.janela, text="Turma:").pack()
self.class_entry = tk.Entry(self.janela)
self.class_entry.pack()
# Botões para interações
tk.Button(self.janela, text="Cadastrar", command=self.add_student).pack(pady=10)
tk.Button(self.janela, text="Exibir Lista", command=self.show_students).pack(pady=10)
tk.Button(self.janela, text="Salvar Lista", command=self.save_students).pack(pady=10)
tk.Button(self.janela, text="Carregar Lista", command=self.load_students).pack(pady=10)
# Área de texto para exibir a lista de alunos
self.text_area = tk.Text(self.janela, width=50, height=10)
self.text_area.pack(pady=10)
def add_student(self):
name = self.name_entry.get()
address = self.address_entry.get()
student_class = self.class_entry.get()
if name and address and student_class:
student_data = f"Nome: {name}, Endereço: {address}, Turma: {student_class}"
self.students.append(student_data)
# Limpar os campos de entrada
self.name_entry.delete(0, tk.END)
self.address_entry.delete(0, tk.END)
self.class_entry.delete(0, tk.END)
# Atualizar a área de texto
self.show_students()
else:
messagebox.showwarning("Entrada Inválida", "Por favor, preencha todos os campos!")
def show_students(self):
self.text_area.delete(1.0, tk.END)
for student in self.students:
self.text_area.insert(tk.END, student + "\n")
def save_students(self):
if self.students:
with open("students.txt", "w") as file:
for student in self.students:
file.write(student + "\n")
messagebox.showinfo("Sucesso", "Dados dos alunos salvos com sucesso!")
else:
messagebox.showwarning("Sem Dados", "Nenhum dado de aluno para salvar!")
def load_students(self):
if os.path.exists("students.txt"):
with open("students.txt", "r") as file:
loaded_students = file.readlines()
self.students = [student.strip() for student in loaded_students]
self.show_students()
else:
messagebox.showwarning("Arquivo Não Encontrado", "Nenhum arquivo de dados encontrado!")
if __name__ == "__main__":
janela = tk.Tk()
app = StudentApp(janela)
janela.mainloop()Explicação do Código Organizado em Classes
- Classe
StudentApp:
- O método
__init__inicializa a janela principal e a lista de alunos. create_widgetscria e organiza todos os widgets na janela.add_studentadiciona um aluno à lista de alunos.show_studentsexibe a lista de alunos na área de texto.save_studentssalva a lista de alunos em um arquivo de texto.load_studentscarrega a lista de alunos de um arquivo de texto.
- Método
create_widgets:
- Cria rótulos e campos de entrada para nome, endereço e turma.
- Cria botões para cadastrar, exibir, salvar e carregar a lista de alunos.
- Cria uma área de texto para exibir a lista de alunos.
- Funções de Manipulação de Dados:
add_student: Adiciona um aluno à lista e atualiza a área de texto.show_students: Limpa e insere os dados dos alunos na área de texto.save_students: Salva os dados dos alunos em um arquivo de texto.load_students: Carrega os dados dos alunos de um arquivo de texto.
- Execução do Aplicativo:
- Criamos uma instância da classe
StudentAppe iniciamos o loop principal do Tkinter comjanela.mainloop().
programador/desafios /Python