2016-10-21 4 views
0

メインスレッドで実行中のプログラムのデータを使用してリアルタイムに更新される2つのプロットを描画するにはどうすればよいですか?メインスレッドを使用またはブロックせずに、複数のリアルタイムプロットを描画するにはどうすればよいですか?

私はPyQTGraphはQApplicationクラスが、QApplication.exec()ファンクションブロックのメインプログラムの実行を使用しようとするも、それがスレッド上で実行することができます。これらの3つの質問に

回答は役立つかもしれない:

1)オブジェクトを描画するためにメインスレッドを使用する必要はありません別のpython可視化ライブラリ/ APIはありますが、リアルタイムプロットを描画するのに十分な速さで?

2)これはPythonのマルチプロセッシング機能を使ってどのように行うのですか?私はちょうどスレッド処理を学んだので、マルチプロセッシングは難しいようです。メインプログラムとグラフを更新する別の処理の間でデータを渡すためには、どのようなコード行が必要ですか?

3)マルチプロセスは、メインプロセスから1つのプロセスでリアルタイムプロットを更新するのに十分速いでしょうか?

ご協力いただきありがとうございます。

+0

マルチプロセッシングが唯一の選択肢です。 isが十分に速いかどうかは、データレート(プロッ​​トデータのデータレート)、一度に表示するポイント数、グラフの更新頻度、PCの速さによって異なります。 pyqtgraphには、正しく覚えていれば、マルチプロセッシングのサポートが組み込まれています。私は、それがサンプルアプリケーションの例の1つで実証されていると思います。 –

+0

私は、Python GILは一度に1つのスレッドしか実行されないため、マルチプロセッシングはあなたの唯一の選択肢です。とにかくQtベースのグラフ作成ライブラリはすべてメインスレッドに描画する必要があります。 –

+0

お返事ありがとうございます。それは私がマルチプロセッシングを使用しなければならないことを私が確認しています。簡単な方法がない限り、プロセス間通信のためにソケットを使用する予定です。 – mago3421

答えて

1

これはスレッドセーフであるため、PyQt固有のものです 。 たとえば、別のスレッドを開始しようとします。これは

もう一つの方法は、matplotlibのを使用してインスタンス化することですランタイムエラーが発生するようopenvcモジュールを使用すると、OpenCVの機能で、メインアプリケーションからすべてのPyQtの機能を使用しないこと

import threading 
threading.Timer(2, self.some_opencvplotfunction).start() #start every 2 sec 

で2番目のプロットを行うには1つまたは複数のサブプロット!

if __name__ == '__main__': 
     app = QtGui.QApplication(sys.argv) 
     app.setStyle(QStyleFactory.create("Windows")) 
     Dialog = QtGui.QDialog() 
     ui = MAIN() 
     ui.setupUi(Dialog) 

とあなたのCPUが処理することができるよう、あなたのGUIにできるだけ多くサブロットを追加するために許可されている

ui.figure, ui.axis = plt.subplots(figsize=(7.6, 6.1)) 
    ui.canvas = FigureCanvas(ui.figure) 
    scene.addWidget(ui.canvas) 

あなたのメインクラスで: はその後のようなあなたのPyQtはGUIにあなたのmatplotlibのオブジェクトをバインドします。 ..

+1

これは啓発です。ありがとうございました。 – mago3421

+0

@ mago3421この便利な理由が見つからない場合、なぜupvoteまたは良い答えとしてマーキングですか?とても親切な、私はrepポイントが必要です –

+0

私は更新が表示されないように私は初心者ですが、私はupvoteでした。 – mago3421

関連する問題