【问题标题】:how can i run both tkinter and watchdog together我怎样才能同时运行 tkinter 和 watchdog
【发布时间】:2020-11-22 20:45:27
【问题描述】:

简而言之,我想做的是让一个带 LED 的 arduino 和一个 gui 显示存储在一个不断更新的 json 文件中的信息(它来自一个名为 Elite Dangerous 的游戏)。

所以我使用看门狗查看文件何时更新,然后读取新信息。然后我想使用 tkinter 来显示信息,例如:盒子改变颜色

但是问题是,当我使用 tkinter 时,mainloop() 会停止其余代码的运行(我假设这是因为它是一个无限循环)。 我对编程还是很陌生,所以请客气:P 我对这个网站也很陌生,所以如果缺少任何信息,请告诉我

def main(file_path=None):
    watched_dir = os.path.split(file_path)[0]
    print ('watched_dir = {watched_dir}'.format(watched_dir=watched_dir)) #prints the directory
    patterns = [file_path]
    print ('patterns = {patterns}'.format(patterns=','.join(patterns))) #prints the file with path
    event_handler = MyEventHandler(patterns=patterns)

#creating the observer and watching the file
    observer = Observer()
    observer.schedule(event_handler, watched_dir, recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
        observer.join()

【问题讨论】:

  • 你可以这样做,但你必须小心一点。您需要通过线程将 GUI 和您的程序彼此分开。你可以让你的 GUI 读取一个文件,但你不能让你的 GUI 由 json 更新。你可能对这个stackoverflow.com/questions/26703502/threads-and-tkinter/…感兴趣
  • oki,我回家后会试着调查一下 :)
  • 只是为了意识到这一点。我用 tkinter 和线程编写了一个小程序,但我讨厌它。解决这个问题可能需要一些时间。最美好的祝愿!
  • tkinterwatchdog(是pypi中的watchdog吗?)可以一起运行,因为watchdog实际上是作为线程运行的。
  • 它是 pypi 看门狗是的。对不起,我将如何让 tkinter 与看门狗一起运行?我还尝试使 gui 成为上面评论中所述的自己的线程,但它仍然停止其余代码

标签: python loops tkinter python-watchdog


【解决方案1】:

以下是一起运行tkinterwatchdog 的示例:

import tkinter as tk
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyEventHandler(FileSystemEventHandler):
    def __init__(self, callback):
        super().__init__()
        self.callback = callback

    def on_modified(self, event):
        self.callback(event.src_path)

def on_modified(target):
    txtbox.insert('end', target+' is modified\n')

event_handler = MyEventHandler(on_modified)
observer = Observer()
observer.schedule(event_handler, '.', recursive=False)

root = tk.Tk()

txtbox = tk.Text(root, width=40, height=20)
txtbox.pack()

observer.start()
root.mainloop()

observer.stop()
observer.join()

【讨论】:

    猜你喜欢
    • 2021-05-27
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2021-07-06
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多