@jslow1998

Как сделать выбор папки в скрипте?

Здраствуйте, есть скрипт, который копирует файлы из одной папки в другую.
Как сделать что бы ползователь сам мог выбирать из какой и в какую копировать файлы? желательно графический интерфейс.

import shutil
import time

from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer

class EventHandler(FileSystemEventHandler):
    def on_created(self, event):
        print(event.event_type, event.src_path)
        print('О новый файл! Я его копирую!')
        shutil.copy(event.src_path, 'C:\\test\\backup')

if __name__ == "__main__":
    path = r"C:\test\testcopy"
    event_handler = EventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
  • Вопрос задан
  • 411 просмотров
Решения вопроса 1
import os
import shutil
import time
from watchdog.events import FileSystemEventHandler 
from watchdog.observers import Observer  

class EventHandler(FileSystemEventHandler):
    def __init__(self, dest_folder):
        super().__init__()
        self.dest_folder = dest_folder

    def on_created(self, event):
        print(event.event_type, event.src_path)
        print('О новый файл! Я его копирую!')
        shutil.copy(event.src_path, self.dest_folder)


if __name__ == "__main__":
    src_path = input("Введите путь к исходной папке: ")
    dest_path = input("Введите путь к папке назначения: ")

    if not os.path.exists(src_path):
        print(f"{src_path} не существует.")
        exit()

    if not os.path.exists(dest_path):
        print(f"{dest_path} не существует.")
        exit()

    event_handler = EventHandler(dest_path) 
    observer = Observer()
    observer.schedule(event_handler, src_path, recursive=True)
    observer.start()
    observer.join()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
from tkinter import filedialog
from tkinter import *
root = Tk()
root.withdraw()
folder_selected = filedialog.askdirectory()
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
import tkinter as tk
from tkinter import filedialog as fd

root = tk.Tk()  # пустое родительское окно
root.withdraw()  # прячем его
result = fd.askdirectory(
    master=root,   # диалогу нужно родительское окно, путь даже невидимое.
    mustexist=True)  # только существующие каталоги
root.destroy()  # уничтожаем родительское окно
print(type(result), repr(result))  # result будет содержать путь или пустую строку при отмене
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы