我使用PyQtGraph和PySide2显示平面2D图像和3D体积的2D切片(CT/MRI体积数据集等),用户可以在其中平移/缩放、滚动等
我想做的是在视图中的几个位置有文本,覆盖在图像上,例如在角落里——我可以指定的地方。 我希望此文本保持其屏幕位置,而不考虑图像平移/缩放等。 我还希望在用户进行查看更改(例如查看参数,如像素大小)时实时更新部分文本
在我看来,最合适的选择是一个传奇项目。存在以下问题:
另一种选择是LabelItem或TextItem,尽管我找不到一种方法来分配屏幕位置,而不是图像位置。ie-如何指定视图窗口的左下角而不是图像的左下角-当然,图像可以移动
-是否有方法固定相对于视口的标签/文本位置
有趣的是,LabelItem pans&;缩放图像,而TextItem仅平移图像
下面是我的最低工作代码和每个文本的例子
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)
text0 = pg.LabelItem("this is a LabelItem", color=(128, 0, 0))
text0.setPos(25, 25) # <---- These are coords within the IMAGE
plot_view.addItem(text0)
text1 = pg.TextItem(text='This is a TextItem', color=(0, 128, 0))
plot_view.addItem(text1)
text1.setPos(75, -20) # <---- These are coords within the IMAGE
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()
一种可能的解决方案是将QLabel添加到ImageView使用的QGraphicsView的视口中:
相关问题 更多 >
编程相关推荐