Python Qt Designer界面实现UART串口实时读数据线程不更新UI问题求解
问题根因及修复方案
- 核心错误是线程创建逻辑不正确
你当前的写法t2 = threading.Thread(target=self.uart_read_data_permanently(ui_mesurements))会直接调用uart_read_data_permanently函数,而非将函数作为参数传递给线程执行。主线程会卡在这个带无限循环的读函数中,自然无法实时更新界面,只有函数终止才会输出结果,正确的线程创建写法如下:
# target传函数对象,参数通过args元组传递 t2 = threading.Thread(target=self.uart_read_data_permanently, args=(ui_mesurements,))
- 跨线程操作UI控件导致更新阻塞
所有主流Python GUI框架(PyQt/PySide/Tkinter等)都不支持在非主线程中直接修改UI元素,你在子线程里直接调用mesurementbox.mesurements_textedit.append会触发界面刷新阻塞,出现更新滞后甚至程序崩溃的问题。
修复方案对应你使用的框架调整即可:如果用PyQt/PySide可以自定义信号,子线程读到数据后发射信号,主线程绑定槽函数接收数据更新文本框;如果用Tkinter可以设置全局缓存变量存读取结果,主线程用after方法定时轮询缓存更新UI。 - 可选逻辑优化
你当前代码中answer变量是累加赋值,每次输出都会重复展示之前所有的读取结果,不需要保留历史拼接的话可以每次读取新值就覆盖answer,历史记录直接在文本框控件中留存即可。
内容的提问来源于stack exchange,提问作者SabrineGGGGG
相关产品推荐
相关产品推荐

