如何通过滚动显示PyQt4中的RGBA numpy数组图像?

2024-03-28 21:41:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的自定义窗口中显示PyQt4中的两个图像。左侧是源图像。在右侧,转换后的图像将是像素级的图像。图像将以RGBA格式由PIL加载(low),并用于numpy(scipy.ndimage.imread)。在

两个图像的大小相同(因为转换后的图像将从源图像生成),并且两个显示器的大小相同(与图像大小无关):

  • 如果图像宽度小于显示器的宽度,则图像将在显示器中左居中。如果它更大,我需要滚动显示。在
  • 高度、顶部居中和垂直滚动条的类似标准。在
  • 如果我在源显示中滚动,变换后的显示也将滚动,但是变换后的显示将没有滚动条。在

问题:我可以使用什么组件来显示具有内部滚动功能的图像?(我对组件名称和一些指导原则很满意;代码会很感激,但主要概念对于答案来说是重要的)。在


Tags: 图像numpy宽度pil高度格式组件像素
1条回答
网友
1楼 · 发布于 2024-03-28 21:41:44

有几种解决方案。如果您只想创建一次numpy“image”,然后再显示它,并且它不是太大(或者您不关心内存),您可以简单地将其转换为QPixmap并在一个视口中显示它:Convert numpy array to PySide QPixmap

    self.imageLabel = QtGui.QLabel()
    self.imageLabel.setBackgroundRole(QtGui.QPalette.Base)
    self.imageLabel.setSizePolicy(QtGui.QSizePolicy.Ignored,
            QtGui.QSizePolicy.Ignored) # not sure about this one.
    self.imageLabel.setPixmap(...pixmap here...)

    self.scrollArea = QtGui.QScrollArea()
    self.scrollArea.setBackgroundRole(QtGui.QPalette.Dark)
    self.scrollArea.setWidget(self.imageLabel)

(取自http://ftp.ics.uci.edu/pub/centos0/ics-custom-build/BUILD/PyQt-x11-gpl-4.7.2/examples/widgets/imageviewer.py

如果图像太大,则可以添加油漆钩。在钩子中,获取QScrollArea(视区)的可见部分,将其转换为pixmap并进行渲染。在

当numpy数组一直在变化时也是如此。更新阵列后需要触发刷新。然后,Qt将调用paint钩子,新内容将可见。在

相关问题 更多 >