как я могу запустить одновременно tkinter и watchdog - PullRequest
0 голосов
/ 02 августа 2020

Короче говоря, я пытаюсь создать Arduino со светодиодами и gui отображать информацию, хранящуюся в постоянно обновляемом файле json (из игры под названием Elite Dangerous).

Итак, я использую сторожевой таймер, чтобы увидеть, когда файл обновлен, а затем прочитать новую информацию. Затем я хотел бы использовать tkinter для отображения информации, например: коробки, меняющие цвет

Однако проблема в том, что, когда я использую tkinter, mainl oop () останавливает выполнение остальной части кода (im предполагая, что это потому, что это бесконечное l oop). Я все еще очень новичок в программировании, поэтому, пожалуйста, будьте любезны: 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()

1 Ответ

1 голос
/ 03 августа 2020

Ниже приведен пример выполнения tkinter и watchdog вместе:

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()
...