Pyqt5 QWidget.show() не работает в другом потоке
Посмотрите, есть ли мой объект Qwidget, и если я работаю с этим объектом в основном потоке, проблем нет. Qwidget .show работает, но если я запускаю в другом потоке (threading.Thread), программа зависает и закрывается.
ЧТО Я МОГУ СДЕЛАТЬ ?
1 ответ
Одним словом: не делайте этого. Это даже не связано с потоками, все связано с разделением пользовательского интерфейса и «бизнес-логики».
Поместите код, который вы выполняли в потоке, в QObject.
Этот объект должен излучать сигналы и предоставлять слоты для взаимодействия с пользовательским интерфейсом. Он вообще не должен знать никаких объектов пользовательского интерфейса.
Подключите этот объект к объекту пользовательского интерфейса, используя соединения сигнал / слот.
Переместите объект в другой поток.
Начать нить.
И теперь вы полностью избежали проблемы. Но убедитесь, что объект бизнес-логики никогда не знает о каких-либо объектах пользовательского интерфейса: он не может напрямую взаимодействовать с ними, поскольку будет находиться в неправильном потоке и не будет должным образом отделен от пользовательского интерфейса.