質問

関数 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の人々にこれについて尋ねてください。 PyQtに固有のものではないようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top