问题描述
看看有我的 Qwidget 对象,如果我在主线程上处理这个对象没问题 Qwidget .show 正在工作,但是 如果我在其他线程上运行(threading.Thread) 程序冻结并关闭。
我能做什么?
解决方法
一句话:别做。它甚至与线程无关,一切都与 UI 和“业务”逻辑的分离有关。
-
将您在线程中运行的代码放入 QObject。
-
让该对象发出信号并提供用于与 UI 交互的插槽。它根本不应该知道任何 UI 对象。
-
使用信号/插槽连接将该对象连接到 UI 对象。
-
将对象移动到另一个线程。
-
启动线程。
你现在完全避免了这个问题。但是要确保业务逻辑对象永远不知道任何 UI 对象:它不能直接与它们交互,因为它会在错误的线程中并且它不会从用户界面。