Advertisement
MizunoBrasil

Estrutura de Pastas

Jan 24th, 2025 (edited)
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.92 KB | None | 0 0
  1. import os
  2. import tkinter as tk
  3. from tkinter import filedialog, messagebox, Menu, scrolledtext, simpledialog
  4. from threading import Thread
  5. from reportlab.pdfgen import canvas
  6. from reportlab.lib.pagesizes import A4
  7. from datetime import datetime
  8.  
  9. # Função para obter a estrutura de pastas e arquivos
  10. def listar_arquivos_diretorios(path):
  11.     estrutura = ""
  12.     for root, dirs, files in os.walk(path):
  13.         nivel = root.replace(path, '').count(os.sep)
  14.         indentacao = '    ' * nivel
  15.         estrutura += f"{indentacao}{os.path.basename(root)}/\n"
  16.         sub_indentacao = '    ' * (nivel + 1)
  17.         for file in files:
  18.             extensao = os.path.splitext(file)[1]
  19.             estrutura += f"{sub_indentacao}{file} ({extensao})\n"
  20.     return estrutura
  21.  
  22. # Função para exibir a estrutura no campo de texto
  23. def exibir_estrutura():
  24.     def tarefa():
  25.         try:
  26.             estrutura_texto.delete("1.0", tk.END)
  27.             estrutura = listar_arquivos_diretorios(os.getcwd())
  28.             estrutura_texto.insert("1.0", estrutura)
  29.         except Exception as e:
  30.             messagebox.showerror("Erro", f"Erro ao listar arquivos: {e}")
  31.  
  32.     Thread(target=tarefa).start()
  33.  
  34. # Função para salvar a estrutura em um arquivo PDF
  35. def salvar_estrutura_pdf():
  36.     def tarefa():
  37.         try:
  38.             caminho_arquivo = filedialog.asksaveasfilename(
  39.                 title="Salvar como",
  40.                 defaultextension=".pdf",
  41.                 filetypes=[("Arquivo PDF", "*.pdf")]
  42.             )
  43.             if not caminho_arquivo:
  44.                 return
  45.  
  46.             estrutura = estrutura_texto.get("1.0", tk.END).strip()
  47.             pdf = canvas.Canvas(caminho_arquivo, pagesize=A4)
  48.             pdf.setFont("Helvetica", 12)
  49.  
  50.             largura_pagina, altura_pagina = A4
  51.             data_atual = datetime.now().strftime("%d/%m/%Y")
  52.             pdf.drawCentredString(largura_pagina / 2, altura_pagina - 50, f"Data: {data_atual}")
  53.  
  54.             y = altura_pagina - 70
  55.  
  56.             for linha in estrutura.split("\n"):
  57.                 if y < 50:
  58.                     pdf.showPage()
  59.                     pdf.setFont("Helvetica", 12)
  60.                     pdf.drawCentredString(largura_pagina / 2, altura_pagina - 50, f"Data: {data_atual}")
  61.                     y = altura_pagina - 70
  62.                 pdf.drawString(50, y, linha)
  63.                 y -= 18
  64.  
  65.             pdf.save()
  66.             messagebox.showinfo("Sucesso", f"Estrutura salva em: {caminho_arquivo}")
  67.         except Exception as e:
  68.             messagebox.showerror("Erro", f"Erro ao salvar arquivo: {e}")
  69.  
  70.     Thread(target=tarefa).start()
  71.  
  72. # Função para salvar a estrutura em um arquivo HTML
  73. def salvar_estrutura_html():
  74.     hd_nome = simpledialog.askstring("HD", "Digite o nome do HD:")
  75.     if hd_nome is None or not hd_nome.strip():
  76.         messagebox.showwarning("Aviso", "Nome do HD não informado.")
  77.         return
  78.  
  79.     caminho_arquivo = filedialog.asksaveasfilename(
  80.         title="Salvar como",
  81.         defaultextension=".html",
  82.         filetypes=[("Arquivo HTML", "*.html")]
  83.     )
  84.     if not caminho_arquivo:
  85.         return
  86.  
  87.     def tarefa():
  88.         try:
  89.             estrutura = estrutura_texto.get("1.0", tk.END).strip()
  90.             data_atual = datetime.now().strftime("%d/%m/%Y")
  91.  
  92.             html_conteudo = f"""<!DOCTYPE html>
  93. <html lang='en'>
  94. <head>
  95.    <meta charset='UTF-8'>
  96.    <meta name='viewport' content='width=device-width, initial-scale=1.0'>
  97.    <title>Estrutura de Arquivos</title>
  98.    <style>
  99.        body {{ font-family: Arial, sans-serif; background-color: #f4f4f9; margin: 0; padding: 0; }}
  100.        .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); }}
  101.        h1 {{ text-align: center; color: #333; }}
  102.        pre {{ background: #f8f9fa; padding: 10px; border: 1px solid #ddd; border-radius: 4px; overflow-x: auto; }}
  103.        p {{ text-align: center; color: #666; }}
  104.    </style>
  105. </head>
  106. <body>
  107.    <div class='container'>
  108.        <h1>Estrutura de Arquivos</h1>
  109.        <p>Data: {data_atual}</p>
  110.        <p>HD: {hd_nome}</p>
  111.        <pre>{estrutura}</pre>
  112.    </div>
  113. </body>
  114. </html>"""
  115.  
  116.             with open(caminho_arquivo, "w", encoding="utf-8") as arquivo:
  117.                 arquivo.write(html_conteudo)
  118.  
  119.             messagebox.showinfo("Sucesso", f"Estrutura salva em: {caminho_arquivo}")
  120.         except Exception as e:
  121.             messagebox.showerror("Erro", f"Erro ao salvar arquivo: {e}")
  122.  
  123.     Thread(target=tarefa).start()
  124.  
  125. # Função para realizar a pesquisa de arquivos
  126. def pesquisar_arquivos(event):
  127.     termo = pesquisa_entry.get().lower()
  128.     estrutura_texto.delete("1.0", tk.END)
  129.     for root, dirs, files in os.walk(os.getcwd()):
  130.         for file in files:
  131.             if termo in file.lower():
  132.                 estrutura_texto.insert(tk.END, os.path.join(root, file) + "\n")
  133.  
  134. # Função para exibir informações sobre o programa
  135. def exibir_sobre():
  136.     messagebox.showinfo("Sobre", "Explorador de Estrutura de Arquivos 1.0\nMizuno 24/12/2024")
  137.  
  138. # Função para sair do programa
  139. def sair_programa():
  140.     janela.destroy()
  141.  
  142. # Configuração da janela principal
  143. janela = tk.Tk()
  144. janela.title("Explorador de Estrutura de Arquivos")
  145. janela.geometry("800x600")
  146.  
  147. # Centralizar a janela manualmente
  148. largura_tela = janela.winfo_screenwidth()
  149. altura_tela = janela.winfo_screenheight()
  150. largura_janela = 800
  151. altura_janela = 600
  152. pos_x = (largura_tela - largura_janela) // 2
  153. pos_y = (altura_tela - altura_janela) // 2
  154. janela.geometry(f"{largura_janela}x{altura_janela}+{pos_x}+{pos_y}")
  155.  
  156. # Menu
  157. menu_bar = Menu(janela)
  158. arquivo_menu = Menu(menu_bar, tearoff=0)
  159. arquivo_menu.add_command(label="Sobre", command=exibir_sobre)
  160. arquivo_menu.add_command(label="Sair", command=sair_programa)
  161. menu_bar.add_cascade(label="Arquivo", menu=arquivo_menu)
  162. janela.config(menu=menu_bar)
  163.  
  164. # Campo de texto para exibir a estrutura
  165. estrutura_texto = scrolledtext.ScrolledText(janela, wrap=tk.WORD, height=20)
  166. estrutura_texto.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
  167.  
  168. # Campo de entrada para pesquisa
  169. pesquisa_frame = tk.Frame(janela)
  170. pesquisa_frame.pack(pady=5, fill=tk.X)
  171. pesquisa_label = tk.Label(pesquisa_frame, text="Pesquisar:")
  172. pesquisa_label.pack(side=tk.LEFT, padx=5)
  173. pesquisa_entry = tk.Entry(pesquisa_frame, width=50)
  174. pesquisa_entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)
  175. pesquisa_entry.bind("<KeyRelease>", pesquisar_arquivos)
  176.  
  177. # Botões
  178. botao_exibir = tk.Button(janela, text="Exibir Estrutura", command=exibir_estrutura)
  179. botao_exibir.pack(side=tk.LEFT, padx=10, pady=10)
  180.  
  181. botao_salvar_pdf = tk.Button(janela, text="Salvar em PDF", command=salvar_estrutura_pdf)
  182. botao_salvar_pdf.pack(side=tk.LEFT, padx=10, pady=10)
  183.  
  184. botao_salvar_html = tk.Button(janela, text="Salvar em HTML", command=salvar_estrutura_html)
  185. botao_salvar_html.pack(side=tk.RIGHT, padx=10, pady=10)
  186.  
  187. # Iniciar a aplicação
  188. janela.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement