我现在已经尝试了将近24小时,但是我无法使其正常工作,并且没有找到适合我的用例的示例/解决方案。
我想做的是:
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()
任何帮助,在此先感谢,谢谢!
我现在已经尝试了将近24小时,但是我无法使它正常工作,并且没有找到适合我的用例的示例/解决方案。我想做的是:用watchdog监视目录...
tkinter
与watchdog
的组合非常容易。由于tkinter
有其自己的主循环,因此您可以将GUI作为主线程运行,并在检测到文件事件时生成Toplevel
窗口。而且Observer
已经是threading.Thread
的子类,因此您不必担心GUI冻结。