Заморозить в .after () Tkinter с последовательным чтением - PullRequest
0 голосов
/ 11 марта 2020

Мой проект заключается в создании сканера, который отправляет значение датчика на последовательный порт. Я хочу управлять сканером, используя GUI Tkinter, поэтому я хочу постоянно проверять, поступает ли что-то на серийный номер. Однако я использовал функцию .after (), которая работает, когда что-то отправлено, но когда сканер «ждет» и ничего не отправлено, GUI зависает, и я не могу ничего сделать, пока что-то не отправлено. Спасибо,

Вот код, запускаемый главной кнопкой:

def Acqard():
   global flag
   flag = 1
   arduinoData.write(b'1')
   log.insert(END, "Début du scan\n")
   root.after(10, write_data)

А вот функции, которые сохраняют данные в текстовом файле:

def write_data():
    global file_stream
    file_stream = open("data.txt", "a") # mode write ou append ?
    write_lines()


def write_lines():
    global after_id
    data = arduinoData.read()
    try:
        data2 = data.decode("utf-8")
        file_stream.write(data2)
        print(data2)
        if data2 == "F":
            root.after_cancel(after_id)
            print("Ca a marché")
            stopacq()
        after_id = root.after(10, write_data)

    except:
       return

И вот функция, которая останавливает сканер:

def stopacq():
   global flag, file_stream
   flag = 0
   root.after_cancel(after_id)# Annulation des rappels automatiques de write_lines
   file_stream.close()
   file_stream = None
   arduinoData.write(b'3')
   log.insert(END, "Scan interrompu\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...