20160605

pysideで作ったウィンドウ上に、pyqtgraphのPlotWidgetを置いて、pyqtgraphで作ったregionを載せる。

Screenshot from 2016-06-05 23-12-48.png
数字を直接与えてやれば、動く状況にはなっている。
あとは、UIとの対応がメインの作業になるんだけど…。
これが結構な作業量になりそうだ。
一つ出来上がれば、後はコピペと置換って状況に持ち込みたい。

目玉の一つである、regionは、プログラムが面倒だけど、是非のせたい。
これがあるだけで、使い勝手や、とっつきやすさが全然違う。

pysideで作ったウィンドウ上に、pyqtgraphのPlotWidgetを載せた。
そのPlotWidget上で、スペクトルをプロットした。
そのプロットに重ねて、フィルタ後のスペクトルをプロットした。
さらに、そのスペクトルに重ねて、pyqtgraphのregionを載せた。

これが重要。

self.graphicsView_A = pg.PlotWidget(self.tab_A, background=[0,0,0,0])
self.region_A = pg.LinearRegionItem()
self.region_A.setZValue(10)
self.region_A.setBounds([np.log10(self.doubleSpinBox_LCF_A.value()), np.log10(self.doubleSpinBox_HCF_A.value())])
self.region_A.setRegion([np.log10(self.doubleSpinBox_LCF_A.value()), np.log10(self.doubleSpinBox_HCF_A.value())])
self.graphicsView_A.addItem(self.region_A)
ざっくりと、こんなかんじだけど、これ以外にもいろいろやっているから、上記を書くだけでは、絵の様にはならない。

20160606screenshot25.png
青くなっている部分が、region。
端の部分をドラッグすれば動くし、中央部分をドラッグすれば、幅を維持したまま動く。

setBoundで境界を指定すれば、それより外側には動かなくできる。
setRegionで値を設定すれば、その位置にregionが動いてくれる。
マウス使って動かすものに、わざわざコマンドが用意されている理由は、初期位置とかを細かく指定したい場合でしょう。
実際自分も使いました。

pyqtgraphのregionを操作している最中に、regionのエッジの値を得て、どこかに表示したいなら、
self.region_A.sigRegionChanged.connect(self.関数名)
とかすれば、カッコ内の関数を実行してくれる。
この関数の中に、UIのダブルスピンボックスに値をsetする命令でも書いておけば、regionを操作しながら、値が動くさまが見れる。

ただ、その関数の中には再計算のコマンドは入れてはいけない。
なぜならば、単純に時間がかかるから。
時間がかかる処理がしたいのであれば、動かし終わった後。
動かし終わった後にシグナルをエミットする事も出来る。
下記。
self.region_A.sigRegionChangeFinished.connect(self.関数)

二つ、シグナルをエミットするコマンドを書いた。
sigRegionChangeFinished(self)とsigRegionChanged(self)
両方共、カッコの中に、関数が入れられて実行できる。
関数名()のように、関数名の後にカッコはいらない。
要る場合もあるんだけど、ココではなぜか要らない。
理由は知らない。
posted by yuchan at 23:22 | Comment(1) | python