from
PyQt5.QtWidgets
import
*
import
sys
import
numpy as np
import
pyqtgraph as pg
from
PyQt5.QtGui
import
*
from
PyQt5.QtCore
import
*
class
Window(QMainWindow):
def
__init__(
self
):
super
().__init__()
self
.setWindowTitle(
"PyQtGraph"
)
self
.setGeometry(
100
,
100
,
700
,
550
)
icon
=
QIcon(
"skin.png"
)
self
.setWindowIcon(icon)
self
.UiComponents()
self
.show()
def
UiComponents(
self
):
widget
=
QWidget()
text
=
"Data Slicing"
label
=
QLabel(text)
label.setMinimumWidth(
130
)
label.setWordWrap(
True
)
win
=
QMainWindow()
cwid
=
QWidget()
win.setCentralWidget(cwid)
lay
=
QGridLayout()
cwid.setLayout(lay)
imv1
=
pg.ImageView()
imv2
=
pg.ImageView()
lay.addWidget(imv1,
0
,
0
)
lay.addWidget(imv2,
1
,
0
)
roi
=
pg.LineSegmentROI([[
30
,
64
], [
100
,
64
]], pen
=
'r'
)
imv1.addItem(roi)
x1
=
np.linspace(
-
30
,
10
,
128
)[:, np.newaxis, np.newaxis]
x2
=
np.linspace(
-
20
,
20
,
128
)[:, np.newaxis, np.newaxis]
y
=
np.linspace(
-
30
,
10
,
128
)[np.newaxis, :, np.newaxis]
z
=
np.linspace(
-
20
,
20
,
128
)[np.newaxis, np.newaxis, :]
d1
=
np.sqrt(x1
*
*
2
+
y
*
*
2
+
z
*
*
2
)
d2
=
2
*
np.sqrt(x1[::
-
1
]
*
*
2
+
y
*
*
2
+
z
*
*
2
)
d3
=
4
*
np.sqrt(x2
*
*
2
+
y[:, ::
-
1
]
*
*
2
+
z
*
*
2
)
data
=
(np.sin(d1)
/
d1
*
*
2
)
+
\
(np.sin(d2)
/
d2
*
*
2
)
+
(np.sin(d3)
/
d3
*
*
2
)
def
update():
d2
=
roi.getArrayRegion(data, imv1.imageItem, axes
=
(
1
,
2
))
imv2.setImage(d2)
roi.sigRegionChanged.connect(update)
imv1.setImage(data)
imv1.setHistogramRange(
-
0.01
,
0.01
)
imv1.setLevels(
-
0.003
,
0.003
)
update()
layout
=
QGridLayout()
label.setMinimumWidth(
130
)
widget.setLayout(layout)
layout.addWidget(label,
1
,
0
)
layout.addWidget(win,
0
,
1
,
3
,
1
)
self
.setCentralWidget(widget)
App
=
QApplication(sys.argv)
window
=
Window()
sys.exit(App.
exec
())