首页 > 解决方案 > 冻结在 .after() Tkinter 中并进行串行读取

问题描述

我的项目是构建一个在串口上发送传感器值的扫描仪。我想使用 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)

以下是将 DATA 保存在 txt 文件中的函数:

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")

标签: pythontkinterarduino

解决方案


推荐阅读