Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import tkinter as tk
- from tkinter import filedialog, messagebox, Menu, scrolledtext, simpledialog
- from threading import Thread
- from reportlab.pdfgen import canvas
- from reportlab.lib.pagesizes import A4
- from datetime import datetime
- # Função para obter a estrutura de pastas e arquivos
- def listar_arquivos_diretorios(path):
- estrutura = ""
- for root, dirs, files in os.walk(path):
- nivel = root.replace(path, '').count(os.sep)
- indentacao = ' ' * nivel
- estrutura += f"{indentacao}{os.path.basename(root)}/\n"
- sub_indentacao = ' ' * (nivel + 1)
- for file in files:
- extensao = os.path.splitext(file)[1]
- estrutura += f"{sub_indentacao}{file} ({extensao})\n"
- return estrutura
- # Função para exibir a estrutura no campo de texto
- def exibir_estrutura():
- def tarefa():
- try:
- estrutura_texto.delete("1.0", tk.END)
- estrutura = listar_arquivos_diretorios(os.getcwd())
- estrutura_texto.insert("1.0", estrutura)
- except Exception as e:
- messagebox.showerror("Erro", f"Erro ao listar arquivos: {e}")
- Thread(target=tarefa).start()
- # Função para salvar a estrutura em um arquivo PDF
- def salvar_estrutura_pdf():
- def tarefa():
- try:
- caminho_arquivo = filedialog.asksaveasfilename(
- title="Salvar como",
- defaultextension=".pdf",
- filetypes=[("Arquivo PDF", "*.pdf")]
- )
- if not caminho_arquivo:
- return
- estrutura = estrutura_texto.get("1.0", tk.END).strip()
- pdf = canvas.Canvas(caminho_arquivo, pagesize=A4)
- pdf.setFont("Helvetica", 12)
- largura_pagina, altura_pagina = A4
- data_atual = datetime.now().strftime("%d/%m/%Y")
- pdf.drawCentredString(largura_pagina / 2, altura_pagina - 50, f"Data: {data_atual}")
- y = altura_pagina - 70
- for linha in estrutura.split("\n"):
- if y < 50:
- pdf.showPage()
- pdf.setFont("Helvetica", 12)
- pdf.drawCentredString(largura_pagina / 2, altura_pagina - 50, f"Data: {data_atual}")
- y = altura_pagina - 70
- pdf.drawString(50, y, linha)
- y -= 18
- pdf.save()
- messagebox.showinfo("Sucesso", f"Estrutura salva em: {caminho_arquivo}")
- except Exception as e:
- messagebox.showerror("Erro", f"Erro ao salvar arquivo: {e}")
- Thread(target=tarefa).start()
- # Função para salvar a estrutura em um arquivo HTML
- def salvar_estrutura_html():
- hd_nome = simpledialog.askstring("HD", "Digite o nome do HD:")
- if hd_nome is None or not hd_nome.strip():
- messagebox.showwarning("Aviso", "Nome do HD não informado.")
- return
- caminho_arquivo = filedialog.asksaveasfilename(
- title="Salvar como",
- defaultextension=".html",
- filetypes=[("Arquivo HTML", "*.html")]
- )
- if not caminho_arquivo:
- return
- def tarefa():
- try:
- estrutura = estrutura_texto.get("1.0", tk.END).strip()
- data_atual = datetime.now().strftime("%d/%m/%Y")
- html_conteudo = f"""<!DOCTYPE html>
- <html lang='en'>
- <head>
- <meta charset='UTF-8'>
- <meta name='viewport' content='width=device-width, initial-scale=1.0'>
- <title>Estrutura de Arquivos</title>
- <style>
- body {{ font-family: Arial, sans-serif; background-color: #f4f4f9; margin: 0; padding: 0; }}
- .container {{ max-width: 800px; margin: 20px auto; padding: 20px; background: #fff; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }}
- h1 {{ text-align: center; color: #333; }}
- pre {{ background: #f8f9fa; padding: 10px; border: 1px solid #ddd; border-radius: 4px; overflow-x: auto; }}
- p {{ text-align: center; color: #666; }}
- </style>
- </head>
- <body>
- <div class='container'>
- <h1>Estrutura de Arquivos</h1>
- <p>Data: {data_atual}</p>
- <p>HD: {hd_nome}</p>
- <pre>{estrutura}</pre>
- </div>
- </body>
- </html>"""
- with open(caminho_arquivo, "w", encoding="utf-8") as arquivo:
- arquivo.write(html_conteudo)
- messagebox.showinfo("Sucesso", f"Estrutura salva em: {caminho_arquivo}")
- except Exception as e:
- messagebox.showerror("Erro", f"Erro ao salvar arquivo: {e}")
- Thread(target=tarefa).start()
- # Função para realizar a pesquisa de arquivos
- def pesquisar_arquivos(event):
- termo = pesquisa_entry.get().lower()
- estrutura_texto.delete("1.0", tk.END)
- for root, dirs, files in os.walk(os.getcwd()):
- for file in files:
- if termo in file.lower():
- estrutura_texto.insert(tk.END, os.path.join(root, file) + "\n")
- # Função para exibir informações sobre o programa
- def exibir_sobre():
- messagebox.showinfo("Sobre", "Explorador de Estrutura de Arquivos 1.0\nMizuno 24/12/2024")
- # Função para sair do programa
- def sair_programa():
- janela.destroy()
- # Configuração da janela principal
- janela = tk.Tk()
- janela.title("Explorador de Estrutura de Arquivos")
- janela.geometry("800x600")
- # Centralizar a janela manualmente
- largura_tela = janela.winfo_screenwidth()
- altura_tela = janela.winfo_screenheight()
- largura_janela = 800
- altura_janela = 600
- pos_x = (largura_tela - largura_janela) // 2
- pos_y = (altura_tela - altura_janela) // 2
- janela.geometry(f"{largura_janela}x{altura_janela}+{pos_x}+{pos_y}")
- # Menu
- menu_bar = Menu(janela)
- arquivo_menu = Menu(menu_bar, tearoff=0)
- arquivo_menu.add_command(label="Sobre", command=exibir_sobre)
- arquivo_menu.add_command(label="Sair", command=sair_programa)
- menu_bar.add_cascade(label="Arquivo", menu=arquivo_menu)
- janela.config(menu=menu_bar)
- # Campo de texto para exibir a estrutura
- estrutura_texto = scrolledtext.ScrolledText(janela, wrap=tk.WORD, height=20)
- estrutura_texto.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
- # Campo de entrada para pesquisa
- pesquisa_frame = tk.Frame(janela)
- pesquisa_frame.pack(pady=5, fill=tk.X)
- pesquisa_label = tk.Label(pesquisa_frame, text="Pesquisar:")
- pesquisa_label.pack(side=tk.LEFT, padx=5)
- pesquisa_entry = tk.Entry(pesquisa_frame, width=50)
- pesquisa_entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)
- pesquisa_entry.bind("<KeyRelease>", pesquisar_arquivos)
- # Botões
- botao_exibir = tk.Button(janela, text="Exibir Estrutura", command=exibir_estrutura)
- botao_exibir.pack(side=tk.LEFT, padx=10, pady=10)
- botao_salvar_pdf = tk.Button(janela, text="Salvar em PDF", command=salvar_estrutura_pdf)
- botao_salvar_pdf.pack(side=tk.LEFT, padx=10, pady=10)
- botao_salvar_html = tk.Button(janela, text="Salvar em HTML", command=salvar_estrutura_html)
- botao_salvar_html.pack(side=tk.RIGHT, padx=10, pady=10)
- # Iniciar a aplicação
- janela.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement