Мой проект заключается в создании сканера, который отправляет значение датчика на последовательный порт. Я хочу управлять сканером, используя 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")