当监视目录中的文件更改时,使用监视程序和tkinter打开GUI对话框

问题描述 投票:2回答:1

我现在已经尝试了将近24小时,但是我无法使其正常工作,并且没有找到适合我的用例的示例/解决方案。

我想做的是:

  • 使用监视程序监视目录中的文件更改
  • on_modified事件上打开tkinter GUI

问题:Main-Threadmainloop()有关,并且我仅找到脚本的示例,在这些脚本中,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()

任何帮助,在此先感谢,谢谢!

我现在已经尝试了将近24小时,但是我无法使它正常工作,并且没有找到适合我的用例的示例/解决方案。我想做的是:用watchdog监视目录...

python python-3.x tkinter watchdog python-watchdog
1个回答
0
投票

tkinterwatchdog的组合非常容易。由于tkinter有其自己的主循环,因此您可以将GUI作为主线程运行,并在检测到文件事件时生成Toplevel窗口。而且Observer已经是threading.Thread的子类,因此您不必担心GUI冻结。

© www.soinside.com 2019 - 2024. All rights reserved.