PyQt6中QThread运行时GUI空白无响应的问题排查
解决PyQt6启动QThread后GUI阻塞空白的问题
核心原因
你肯定是直接调用了QThread的run()方法,而非start()方法。run()会在当前主线程同步执行,直接卡死GUI事件循环;只有start()才会真正创建独立线程,异步执行线程逻辑。
错误代码示例(你大概率这么写的)
# 错误:直接调用run(),主线程被阻塞 my_thread = MyCustomThread() my_thread.run()
正确写法
# 正确:用start()启动异步线程 my_thread = MyCustomThread() my_thread.start()
额外注意事项
- 线程的耗时逻辑必须放在
QThread的run()方法内,不能放到主线程执行。 - 线程绝对不能直接操作GUI控件,必须通过
pyqtSignal发送信号,由主线程接收后更新UI。比如线程计算完游戏状态,发信号给主线程,主线程再更新井字棋的格子显示。
快速验证
把启动线程的代码改成start(),哪怕run()里只有QtCore.QThread.msleep(1000),GUI也不会再阻塞空白了。
内容的提问来源于stack exchange,提问作者LookAgain2
相关产品推荐
相关产品推荐

