Hi-
 I am trying to display 2D and 3D image datasets within an ImageView, with 
some metadata being displayed in the window corners (such as min/max 
intensity levels as per setLevels() method etc).
I expect these values to change during viewing so was hoping a 
straightforward way of doing so.

The best way I can see so far is to use the legendItem, however I can't 
find a way to prevent the user being able to click & drag it, and editing 
the text is a bit of a pain (seems like you have to use 
legend.getLabel(my_view) to get the label object to then setText(). 
Awkward.)

Alternatively, the LabelItem seems easier to change text, but:
1- I can't find a way to consistently locate the text relative to the 
window- it always moves when I pan/zoom.
2- I can't see how to get the correct coords relative to the window. I 
tried the mapToScene(), though I can't see a difference in behaviour 
compared to when I use mapFromScene() which leads me to believe I am not 
using the QGraphicsView object but something else...

Is there a way to fix text position on the screen so that it doesn't move 
with pan/zoom?

Sample code below, with sample legend, textItem and labelItem.  The 
labelItem moves and even zooms with the image. The textItem moves with the 
image.

How can I:
1- set Legend location
2- prevent the user moving the legend? 

Thanks!


from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QMainWindow
from PySide2.QtWidgets import QWidget
from PySide2.QtWidgets import QHBoxLayout

import pyqtgraph as pg
import numpy as np
import sys


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.cw = QWidget(self)
        self.cw.setAutoFillBackground(True)
        self.setCentralWidget(self.cw)

        self.layout = QHBoxLayout()
        self.cw.setLayout(self.layout)

        self.DcmImgWidget = MyImageWidget(parent=self)
        self.layout.addWidget(self.DcmImgWidget)

        self.show()


class MyImageWidget(pg.ImageView):
    def __init__(self, parent):
        super().__init__(parent, view=pg.PlotItem())

        self.ui.histogram.hide()
        self.ui.roiBtn.hide()
        self.ui.menuBtn.hide()

        plot_view = self.getView()
        plot_view.hideAxis('left')
        plot_view.hideAxis('bottom')

        # 50 frames of 100x100 random noise
        img = np.random.normal(size=(50, 100, 100))
        self.setImage(img)

        plot_view.addItem(pg.LabelItem("this is a nice label"))

        text1 = pg.TextItem(text='text1', color=(0, 128, 0))
        plot_view.addItem(text1)
        text1.setPos(75, -20) 

        legend = plot_view.addLegend()
        style = pg.PlotDataItem(pen='w')
        legend.addItem(style, 'legend')


def main():
    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()







-- 
You received this message because you are subscribed to the Google Groups 
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/ac8c9804-cab9-4670-96a9-0277dfd4abb7n%40googlegroups.com.

Reply via email to