Pyqt5 QWidget.show() 不适用于其他线程

问题描述

看看有我的 Qwidget 对象,如果我在主线程上处理这个对象没问题 Qwidget .show 正在工作,但是 如果我在其他线程上运行(threading.Thread) 程序冻结并关闭

我能做什么?

解决方法

一句话:别做。它甚至与线程无关,一切都与 UI 和“业务”逻辑的分离有关。

  1. 将您在线程中运行的代码放入 QObject。

  2. 让该对象发出信号并提供用于与 UI 交互的插槽。它根本不应该知道任何 UI 对象。

  3. 使用信号/插槽连接将该对象连接到 UI 对象。

  4. 将对象移动到另一个线程。

  5. 启动线程。

你现在完全避免了这个问题。但是要确保业务逻辑对象永远不知道任何 UI 对象:它不能直接与它们交互,因为它会在错误的线程中并且它不会从用户界面。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...