LAB-8

Editor de Texto Simples

1. Introdução

Crie um Arquivo Python chamado editor.py:

nano editor.py
				
					import tkinter as tk
from tkinter import filedialog, messagebox

def novo_arquivo():
    text_area.delete(1.0, tk.END)

def abrir_arquivo():
    caminho_arquivo = filedialog.askopenfilename(defaultextension=".txt",
                                                 filetypes=[("Arquivos de Texto", "*.txt"),
                                                            ("Todos os Arquivos", "*.*")])
    if caminho_arquivo:
        try:
            with open(caminho_arquivo, "r") as arquivo:
                text_area.delete(1.0, tk.END)
                text_area.insert(tk.END, arquivo.read())
        except Exception as e:
            messagebox.showerror("Erro", f"Não foi possível abrir o arquivo: {e}")

def salvar_arquivo():
    caminho_arquivo = filedialog.asksaveasfilename(defaultextension=".txt",
                                                   filetypes=[("Arquivos de Texto", "*.txt"),
                                                              ("Todos os Arquivos", "*.*")])
    if caminho_arquivo:
        try:
            with open(caminho_arquivo, "w") as arquivo:
                arquivo.write(text_area.get(1.0, tk.END))
        except Exception as e:
            messagebox.showerror("Erro", f"Não foi possível salvar o arquivo: {e}")

# Configurar a janela principal
janela = tk.Tk()
janela.title("Editor de Texto")
janela.geometry("600x400")

# Menu
menu_barra = tk.Menu(janela)
arquivo_menu = tk.Menu(menu_barra, tearoff=0)
arquivo_menu.add_command(label="Novo", command=novo_arquivo)
arquivo_menu.add_command(label="Abrir", command=abrir_arquivo)
arquivo_menu.add_command(label="Salvar", command=salvar_arquivo)
arquivo_menu.add_separator()
arquivo_menu.add_command(label="Sair", command=janela.quit)
menu_barra.add_cascade(label="Arquivo", menu=arquivo_menu)

janela.config(menu=menu_barra)

# Área de texto
text_area = tk.Text(janela, undo=True, wrap='word')
text_area.pack(expand=True, fill='both')

# Rodar a aplicação
janela.mainloop()
				
			

Salve e Execute

python3 editor.py

Funcionalidades

  • Novo: Limpa a área de texto para começar um novo documento.
  • Abrir: Abre um arquivo de texto existente.
  • Salvar: Salva o conteúdo atual em um arquivo.
  • Interface Simples: Área de texto expansível e menu básico.

2. Sugestões de Funcionalidades Adicionais

Desfazer/Refazer:

  • Implemente comandos para desfazer e refazer alterações no texto.

Barra de Status:

  • Adicione uma barra de status para exibir a linha e a coluna atuais do cursor.

Suporte a Temas:

  • Implemente a capacidade de alternar entre temas claros e escuros.

Busca e Substituição:

  • Adicione uma funcionalidade para buscar texto e substituí-lo.

Suporte a Diferentes Fontes e Tamanhos:

  • Permita que o usuário altere o tipo de fonte e o tamanho do texto.

Melhorias de Interface

Ícones e Atalhos:

  • Use ícones em vez de texto para os itens do menu e adicione atalhos de teclado para facilitar o acesso.

Melhoria do Layout:

  • Aplique um layout mais organizado, utilizando Frame para separação de áreas.

Recursos Avançados

Edição Avançada:

  • Recursos como realce de sintaxe para programação e suporte a plugins.

Autossalvamento:

  • Integre uma funcionalidade de autossalvamento para evitar a perda de dados.

Multiplos Documentos:

  • Suporte a abas para editar múltiplos documentos simultaneamente.

Integração com Sistema de Arquivos:

  • Recursos para abrir e salvar em nuvem, como Google Drive ou Dropbox

Exemplo de Implementação:

Desfazer/Refazer

Você pode usar o recurso undo/redo do widget Text do Tkinter:

				
					# Dentro da configuração da área de texto
text_area = tk.Text(janela, undo=True, wrap='word')

# Adicionar comandos ao menu
editar_menu = tk.Menu(menu_barra, tearoff=0)
editar_menu.add_command(label="Desfazer", command=text_area.edit_undo)
editar_menu.add_command(label="Refazer", command=text_area.edit_redo)
menu_barra.add_cascade(label="Editar", menu=editar_menu)