Pyqt5 QWidget.show() не работает в другом потоке

Посмотрите, есть ли мой объект Qwidget, и если я работаю с этим объектом в основном потоке, проблем нет. Qwidget .show работает, но если я запускаю в другом потоке (threading.Thread), программа зависает и закрывается.

ЧТО Я МОГУ СДЕЛАТЬ ?

1 ответ

Решение

Одним словом: не делайте этого. Это даже не связано с потоками, все связано с разделением пользовательского интерфейса и «бизнес-логики».

  1. Поместите код, который вы выполняли в потоке, в QObject.

  2. Этот объект должен излучать сигналы и предоставлять слоты для взаимодействия с пользовательским интерфейсом. Он вообще не должен знать никаких объектов пользовательского интерфейса.

  3. Подключите этот объект к объекту пользовательского интерфейса, используя соединения сигнал / слот.

  4. Переместите объект в другой поток.

  5. Начать нить.

И теперь вы полностью избежали проблемы. Но убедитесь, что объект бизнес-логики никогда не знает о каких-либо объектах пользовательского интерфейса: он не может напрямую взаимодействовать с ними, поскольку будет находиться в неправильном потоке и не будет должным образом отделен от пользовательского интерфейса.

Другие вопросы по тегам