python - 冻结在 .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")
解决方案
推荐阅读
- apache-kafka - 允许禁用云流的配置?
- unit-testing - 为什么 Karma Coverage 实际显示“未涵盖的声明”?
- python-3.x - 从一个域中抓取许多页面
- reactjs - 在反应表中搜索和排序
- typescript - 为什么 `--isolatedModules` 需要`export type`?
- jquery - 为什么我不能使用像 $(document) 这样的 iframe 文档
- http-live-streaming - Video.js 多流 HLS 不适用于移动设备
- c# - 在视图模型上使用 prism IEventAggregator 时如何使用依赖注入
- java - 使用字符串和整数对文本文件进行排序
- javascript - 从数组中提取对象元素