シグナル アンド スロット メカニズムを使用せず、独自のイベント ループを展開していない場合、Qt/PyQt を実際に使用しても意味がありません。基本的に、フレームワーク自体のコアを再実装することになります。しかし、これはあなたが求めているものではないと思います。
質問を少し明確にしていただければ幸いです(そのため、いくつかの仮定を立てる必要がありました)が、ここに取り引きがあります:
シグナルとスロットの仕組みについて少し混乱していると思います。(または、そうではないかもしれませんが、おそらくあなたにとって明白かもしれないいくつかのことを繰り返して申し訳ありません)。
シグナルとスロットはスレッド化を実装していません (したがって、標準の Python スレッドよりも利点のあるシグナル/スロットを使用するという問題は意味がありません)。
おそらく、シグナルスロットメカニズムはマルチスレッド化されており、シグナルによって呼び出されたスロットは新しいスレッドで実行されると想定しているでしょう。まあ、そうではありません。
Qt のシグナルとスロット メカニズムは、Qt の単一のイベント ループ (QApplication によって実装) で実行され、それ自体が単一のスレッドで実行されます。したがって、シグナルとスロットはマルチスレッドの代わりにはなりません。
ブロックするスロットがある場合、アプリケーション全体がブロックされます。したがって、ブロッキング I/O または時間のかかる関数は、理想的には UI とは別のスレッドに配置する必要があり、スロットはこれらのスレッドの実行を開始する必要があります。独自のスレッドを実装するために QThread を使用するか、標準の Python スレッドを使用するかは別の問題であり、以前 StackOverflow で尋ねられましたが、Qt アプリには QThreads を使用する傾向があります。
したがって、ボタンがあり、クリックされたときに Requests ライブラリでファイルのダウンロードを開始したい場合clicked
は、QPushButton の信号をたとえばスロットに接続するdownloadButtonClicked
と、そのスロットは新しい QThread を開始します。リクエストを使用してファイルをダウンロードすること。QThread からの finished() シグナルをさらに接続して、ダウンロードがいつ完了したかを知り、UI を更新することができます
(これが実際にあなたが求めているものである場合は、コード例を追加します。質問を明確にしてください)