どのようだがPyQt-ケーブルシンボリックリンク?
-
21-08-2019 - |
質問
というのが私のケーブルシンボリックリンクできるよう、プリロードコンテンツがあります。あるイベントまたは類似した内容で実施PyQt?
(かもいスレッドがこのしているように感じられる感謝したいと思います。)
解決
あなたは、少なくとも2つの異なるオプションを持っている、あなたは、スレッドを使用するか、タイマーを使用することができます。 QtのQThreadクラスを使用すると、他のスレッドは、GUIのスレッドを含む、実行されていないときにのみ、プロセスように設定することができ、優先プロパティを提供します。他のオプションは、シングルショットタイマーです。すでにアクティブまたはスケジュールされたすべてのイベントとの同期機能が最初に処理されるように、0ミリ秒単位のタイムアウトを持つQTimerは、イベントキューの背面にイベントを置きます。
のコードでは、2つのオプションは次のようになります:
// (1) use idle thread processing
MyQThreadSubclass idleThread;
idleThread.run(QThread::IdlePriority);
// (2) use QTimer::singleShot
QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));
あなたがシングルショットQTimerで行く場合は、、あなたはまだGUIをブロックできるようあなたはどのくらいの処理に注意してください。あなたはおそらくGUIが遅れを開始しないようにチャンクにそれを破るしたいと思います:
// slot
void doIdleProcessingChunk() {
/* ... main processing here ... */
if (chunksRemain())
QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));
}
もちろん、上記のC ++の構文ですが、PyQtのに対し答えるシングルショットタイマーを使用します。 Pythonでは、グローバルインタプリタロックには、基本的な実装ならば無意味あなたの並行処理の多くを描画するために起こっていますPythonの内で実行されて呼び出されます。
また、両方が異なる理由のために良いですが、PythonのスレッドやQtのスレッドを使用しての選択肢があります。
他のヒント
してい QAbstractEventDispatcher. が ...やっぱら利用ます。理由:
- ますので携帯
- いコードでは、イベントのループが壊れたりアプリが干出口突然。
- がプリロードが、アプリを掲げています。イベントはありませんが処理されない限り、できるプリロードのコンテンツをつついているのは非常に小さいので、荷からミリ秒。
使用スレッドは、送信信号のスレッドのコンテンツのご用意もあります。そのほか、よりシンプルです。