Advertisement
MizunoBrasil

Move arquivos e apaga no diretorio fonte

May 30th, 2024 (edited)
769
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.77 KB | None | 0 0
  1. import os
  2. import shutil
  3. import time
  4. import sys
  5. import threading
  6. from tkinter import Tk, filedialog, messagebox, Label, Button
  7. from tkinter.ttk import Progressbar
  8.  
  9. def center_window(window, width=400, height=150):
  10.     """ Centraliza a janela na tela. """
  11.     screen_width = window.winfo_screenwidth()
  12.     screen_height = window.winfo_screenheight()
  13.     x = (screen_width / 2) - (width / 2)
  14.     y = (screen_height / 2) - (height / 2)
  15.     window.geometry('%dx%d+%d+%d' % (width, height, x, y))
  16.  
  17. def show_alert():
  18.     """ Exibe um alerta informando sobre a movimentação e exclusão dos arquivos. """
  19.     confirmation = messagebox.askokcancel("Atenção!", "Os arquivos serão movidos e os originais serão deletados. "
  20.                                                "Clique em OK para continuar ou Cancelar para sair.")
  21.     return confirmation
  22.  
  23. def select_files():
  24.     """ Abre um diálogo para selecionar arquivos. """
  25.     root = Tk()
  26.     root.withdraw()  # Evita que a janela root do Tkinter seja exibida
  27.     file_paths = filedialog.askopenfilenames(title="Selecione os arquivos")
  28.     root.destroy()
  29.     return file_paths
  30.  
  31. def select_destination():
  32.     """ Abre um diálogo para selecionar o diretório de destino. """
  33.     root = Tk()
  34.     root.withdraw()  # Evita que a janela root do Tkinter seja exibida
  35.     dest_directory = filedialog.askdirectory(title="Selecione o diretório de destino")
  36.     root.destroy()
  37.     return dest_directory
  38.  
  39. def move_files_thread(files, destination, label, progress_bar):
  40.     """ Função para ser executada em uma thread para mover os arquivos. """
  41.     total_files = len(files)
  42.     for index, file in enumerate(files):
  43.         try:
  44.             shutil.move(file, destination)
  45.             # Atualiza a barra de progresso na interface
  46.             progress = (index + 1) * 100 / total_files
  47.             progress_bar['value'] = progress
  48.             label.config(fg='green', font=('Helvetica', 10, 'bold'))
  49.             label.update()
  50.             time.sleep(0.5)
  51.             label.config(fg='green', font=('Helvetica', 10))
  52.             label.update()
  53.             time.sleep(0.5)
  54.         except Exception as e:
  55.             messagebox.showerror("Erro", f"Não foi possível mover o arquivo {file}. Erro: {e}")
  56.             return
  57.     messagebox.showinfo("Sucesso", "Arquivos movidos com sucesso!")
  58.  
  59. def move_files_in_thread(files, destination, label, progress_bar):
  60.     """ Inicia uma thread para mover os arquivos. """
  61.     thread = threading.Thread(target=move_files_thread, args=(files, destination, label, progress_bar))
  62.     thread.start()
  63.  
  64. def main():
  65.     root = Tk()
  66.     root.title("Mover Arquivos")
  67.     center_window(root, 400, 150)
  68.  
  69.     # Exibir alerta sobre a movimentação e exclusão dos arquivos
  70.     confirmation = show_alert()
  71.     if not confirmation:
  72.         root.destroy()
  73.         return
  74.  
  75.     label_intro = Label(root, text="Por favor, selecione os arquivos que deseja mover:")
  76.     label_intro.pack(pady=5)
  77.  
  78.     button_exit = Button(root, text="Sair", command=root.destroy)
  79.     button_exit.pack(pady=5)
  80.  
  81.     files = select_files()
  82.     if not files:
  83.         messagebox.showinfo("Cancelado", "Nenhum arquivo foi selecionado.")
  84.         root.destroy()
  85.         return
  86.  
  87.     destination = select_destination()
  88.     if not destination:
  89.         messagebox.showinfo("Cancelado", "Nenhum diretório de destino foi selecionado.")
  90.         root.destroy()
  91.         return
  92.  
  93.     label = Label(root, text="Aguarde enquanto os arquivos estão sendo movidos...")
  94.     label.pack(pady=10)
  95.     progress_bar = Progressbar(root, orient='horizontal', length=380, mode='determinate')
  96.     progress_bar.pack(pady=10)
  97.  
  98.     move_files_in_thread(files, destination, label, progress_bar)
  99.    
  100.     root.mainloop()
  101.  
  102. if __name__ == "__main__":
  103.     main()
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement