<p>如果有人在我的第一个例子中遇到同样的问题,这就是我必须要做的事情。在</p>
<pre><code>import numpy
from silx.gui import qt
GRAY_COLORTABLE = [qt.qRgb(i, i, i) for i in range(256)]
class PreviewImageWidget(qt.QLabel):
"""Image preview widget. Displays the image in
a 2D numpy array with a grayscale colortable.
"""
def __init__(self, parent=None):
super().__init__(parent)
self.size = qt.QSize(150, 150)
self.setSize(self.size)
self.pixmap = qt.QPixmap()
def setSize(self, size):
self.size = size
self.setFixedSize(self.size)
def setImage(self, img_array):
if img_array is None:
# null pixmap
self.pixmap = qt.QPixmap()
else:
img_array = img_array.copy()
bytesPerLine = img_array.strides[0]
if img_array.dtype != numpy.uint8:
max_value = img_array.max()
img_array = 256. / max_value * img_array
img_array = img_array.astype(numpy.uint8)
height, width = img_array.shape
image = qt.QImage(img_array,
width, height,
bytesPerLine,
qt.QImage.Format_Indexed8)
image.setColorTable(GRAY_COLORTABLE)
pixmap = qt.QPixmap.fromImage(image)
self.pixmap = pixmap.scaled(self.size,
qt.Qt.KeepAspectRatio)
self.setPixmap(self.pixmap)
if __name__ == '__main__':
app = qt.QApplication([])
allPreviewWidgets = []
for sh in [(610, 500), (450, 700), (550, 600),
(500, 500), (510, 500), (500, 520)]:
img_array = numpy.zeros(sh, dtype=numpy.uint8)
img_array[200:350, 250:300] = 255
previewWidget = PreviewImageWidget()
previewWidget.setSize(qt.QSize(300, 300))
previewWidget.setWindowTitle(str(img_array.shape))
previewWidget.show()
previewWidget.setImage(img_array)
allPreviewWidgets.append(previewWidget)
app.exec_()
</code></pre>
<p>在这种情况下,复制数组以确保它在内存中是连续的似乎有帮助,而复制QImage似乎没有必要。在</p>
<p>在我的应用程序PyQt5.13之前,由于一个未知的原因,我的应用程序甚至失败了。我希望这些都是与当前版本的Qt相关的bug,并且它将在下一个版本中得到修复。在</p>