You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python线程实现DJI Tello键盘控制时GUI界面卡顿问题求助

问题原因及修复方案

直接卡死的核心错误

你创建子线程的代码存在语法错误,导致控制逻辑直接在GUI主线程运行,死循环阻塞了主线程导致界面卡死:
你当前的线程创建代码:

self.keyboardThread = Thread(target=self.keyboardControlService.StartControl(), daemon=True)

这里target参数传入的是self.keyboardControlService.StartControl(),加了括号意味着会立即在主线程执行该方法,方法内的while死循环会直接占满主线程资源,GUI事件循环无法运行,界面自然就卡住了。

修复方案很简单,去掉StartControl后面的括号,把函数对象本身传给target即可,线程启动后会自动在子线程调用该方法:

self.keyboardThread = Thread(target=self.keyboardControlService.StartControl, daemon=True)

其他需要注意的潜在问题

  • 循环控制的线程安全:目前你用布尔变量startControl控制循环启停,多线程读写该变量可能存在可见性问题,建议改用threading.Event对象替代布尔值,控制循环的启停更稳妥。
  • UI操作限制:你给控制服务传入了UI对象,如果你后续要在控制逻辑中修改UI元素,大部分GUI框架(如PyQt、Tkinter)都要求UI操作必须在主线程执行,子线程直接操作UI会导致崩溃或不可预期的异常。
  • 线程重复创建风险:如果多次点击开启控制的按钮,会重复创建新的子线程,旧线程没有被正确终止会导致资源泄漏、控制逻辑混乱,建议开启前先判断之前的线程是否存活,存活的话先终止旧线程再创建新线程。

内容的提问来源于stack exchange,提问作者Kostar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:18:00