Вопрос

Я заметил, что когда функция setModel выполняется в параллельном потоке ( Я пробовал threading.Timer или threading.thread), я получаю это:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QHeaderView(0x1c93ed0), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTreeView(0xc65060), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread

Есть ли способ решить эту проблему?

Это было полезно?

Решение

Действительно, многопотоковое использование Qt (и других богатых фреймворков) действительно является деликатной и сложной работой, требующей явного внимания и осторожности - см. документы Qt для отличного освещения предмета (для читателей, имеющих опыт работы с потоками в целом, с предлагаемыми чтениями для тех, кто еще этого не делает).

Если возможно, я бы предложил в качестве наиболее надежной архитектуры для создания потоков в Python то, что я всегда предлагаю: пусть каждая подсистема принадлежит и используется отдельным выделенным потоком; общаться между потоками через экземпляры Queue.Queue , то есть путем передачи сообщений. Этот подход может быть немного ограничительным, но он обеспечивает хорошую основу для конкретных и тщательно спроектированных исключений (основанных на пулах потоков, случайных порождаемых новых потоках, блокировках, переменных условий и других подобных привередливых вещах ;-). В последней категории я бы также классифицировал специфичные для Qt вещи, такие как межпотоковая передача сигналов / слотов через соединения в очереди .

Другие советы

Похоже, вы попали в ограничение Qt. Попробуйте использовать сигналы или события, если вам нужны объекты для связи между потоками.

Или спросите об этом народ Qt. Это не кажется специфическим для PyQt.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top