PyQtGraph ImageView: ViewBox связаны, как их разделить?Python

Программы на Python
Ответить
Anonymous
 PyQtGraph ImageView: ViewBox связаны, как их разделить?

Сообщение Anonymous »

Я создаю средство просмотра DICOM, используя pyqtgraph.ImageView, но столкнулся с проблемой, когда все представления используют один и тот же ViewBox.
Я могу отображать разные изображения в каждом ImageView, но когда я устанавливаю диапазон, пределы или положение для одного представления, другие следуют его примеру. Например, при центрировании одного изображения в точке (0, 0) правильно центрируется только сагиттальный вид, а остальные перемещаются пропорционально движению сагиттального вида, а не их предполагаемым положениям.
Dicom_Viewer
Вот краткое описание моей проблемы:
  • ViewBoxes кажется, связаны или синхронизированы по умолчанию .
  • Я хочу управлять каждым ImageView независимо.
В документации есть такие методы, как отмена регистрации, которые может быть актуально, но я не совсем понимаю их использование.
Раньше я не создавал экземпляр ViewBox явно для каждого ImageView, поэтому я это сделал и не имело никакого значения. Затем я попытался явно отменить регистрацию представлений и удалить ссылку X или Y изображений ImageView.
Код пользовательского интерфейса:
def setup_viewers(self):
# A layout to hold the viewer ports
self.ortho_view_layout = QtWidgets.QGridLayout()
# Remove the space between the viewers
self.ortho_view_layout.setSpacing(0)
self.ortho_view_layout.setContentsMargins(0, 0, 0, 0)
# Add the layout to the main layout
self.main_layout.addLayout(self.ortho_view_layout)

# Adding 3 PyQtGraph ViewBoxes, ImageViews
self.axial_view = ViewBox()
self.sagittal_view = ViewBox()
self.coronal_view = ViewBox()

self.remove_views_links()

self.axial_viewer = ImageView(self.centralwidget, view=self.axial_view)
self.sagittal_viewer = ImageView(self.centralwidget, view=self.sagittal_view)
self.coronal_viewer = ImageView(self.centralwidget, view=self.coronal_view)

# Place them in the grid layout
self.ortho_view_layout.addWidget(self.axial_viewer, 0, 0)
self.ortho_view_layout.addWidget(self.sagittal_viewer, 0, 1)
self.ortho_view_layout.addWidget(self.coronal_viewer, 0, 2)

# Customize initial settings if needed
self.setup_image_viewer(self.axial_viewer)
self.setup_image_viewer(self.sagittal_viewer)
self.setup_image_viewer(self.coronal_viewer)

def remove_views_links(self):
self.axial_view.linkView(ViewBox.XAxis, None)
self.axial_view.linkView(ViewBox.YAxis, None)
self.sagittal_view.linkView(ViewBox.XAxis, None)
self.sagittal_view.linkView(ViewBox.YAxis, None)
self.coronal_view.linkView(ViewBox.XAxis, None)
self.coronal_view.linkView(ViewBox.YAxis, None)

def setup_image_viewer(self, viewer: ImageView):
"""
Configure default settings for a PyQtGraph ImageView.

:param viewer: Instance of pyqtgraph.ImageView to configure.
"""
viewer.ui.roiBtn.hide()
viewer.ui.menuBtn.hide()
viewer.getView().setAspectLocked(True)

Бэкенд:
def render_slice(self, image_view: ImageView, slice_data):
rotated_slice = np.rot90(slice_data, k=2)
width, height = rotated_slice.shape

image_view.setImage(
rotated_slice.T,
autoRange=True,
autoLevels=True,
autoHistogramRange=True,
pos=[-width / 2, -height / 2], # This centers the image
)

def display_views(self):
if self.loaded_image_data is None:
return

for plane, viewer in self.viewers.items():
slice_data = self.image_processor.get_slice(plane)
width, height = slice_data.shape

# Render the slice in the viewer
self.render_slice(viewer, slice_data)

# Explicitly set independent ranges for each viewer
viewer.getView().setRange(
xRange=(0, width),
yRange=(0, height),
padding=0,
)


Подробнее здесь: https://stackoverflow.com/questions/792 ... arate-them
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»