Используйте watchdog и tkinter, чтобы открыть диалоговое окно GUI, когда файл в наблюдаемой директории изменяется - PullRequest
2 голосов
/ 23 февраля 2020

Я пытаюсь сделать это в течение почти 24 часов, но я просто не могу заставить его работать и не нахожу примеров / решений, подходящих для моего варианта использования.

Что я пытаюсь сделать is:

  • Просмотр каталога со сторожевым таймером при изменении файла
  • при on_modified событие открытия tkinter GUI

Проблема: Main-Thread проблемы с mainloop(), и я нахожу только примеры для сценариев, где GUI всегда отображается с самого начала ..

Ошибка: WARNING: NSWindow drag regions should only be invalidated on the Main Thread! или main thread is not in main loop tkinter

Пример минималистского кода:

class PopupWindow:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)

        # code for input fields
        # ...

        self.frame.pack()

    def set_user_input(self):
        self.master.destroy()
        self.master.quit()


class MainClass(FileSystemEventHandler):
    def __init__(self):
        print("Watching files in '/directory-to-be-watched' for changes...")

    def run(self):
        print("Starting script")

        root = tk.Tk()
        app = PopupWindow(root)
        # read input values ...
        root.mainloop()
        root.destroy()

    def on_modified(self, event):
        self.run()


event_handler = MainClass()
observer = Observer()
observer.schedule(event_handler, "/directory-to-be-watched", recursive=False)
observer.start()


try:
    while True:
        time.sleep(10)

except KeyboardInterrupt:
    observer.stop()

observer.join()

ЛЮБАЯ помощь будет высоко оценена, заранее спасибо!

...